我试图限制我只有一个接收器的网络。
首先,我通过以下方式检测 SO_SNDBUF 的大小:
getsockopt(sendsockfd, SOL_SOCKET, SO_SNDBUF, &sndBufferSize, &sbsLen);
然后,我不断填充这个缓冲区,直到它完全填满:
if (sndBufferSize - NbBytesInBuffer >= HEADER){
memcpy (sendBuffer + NbBytesInBuffer, &buf_header, HEADER);
NbBytesInBuffer +=HEADER;
}
当然,我只提到我的代码的相关部分。
最后,当缓冲区已满时,写入套接字。
if (sndBufferSize - NbBytesInBuffer < HEADER)
sentSize = write(sendsockfd,sendBuffer,NbBytesInBuffer);
...
我的问题还没有提到。在我想再次重新发送数据之前,上述所有内容都运行良好。
现在,因为我想以最大可能的速率发送,所以我必须尽可能少地等待。(即我必须立即重新发送发送缓冲区为空)。
如何检测write()
重新清空发送缓冲区所需的时间(以最佳方式)?
PS请不要告诉我等待任意时间(例如usleep(10000);
)