내 네트워크를 단 하나의 수신기로 제한하려고합니다. , 난 그냥 언급하고 당연히C++에서 소켓의 송신 버퍼가 비어있을 때까지 얼마나 기다려야합니까?
if (sndBufferSize - NbBytesInBuffer >= HEADER){
memcpy (sendBuffer + NbBytesInBuffer, &buf_header, HEADER);
NbBytesInBuffer +=HEADER;
}
: 그것은 전적으로 가득 찰 때까지 나는이 버퍼를 채우고 유지, 그리고
getsockopt(sendsockfd, SOL_SOCKET, SO_SNDBUF, &sndBufferSize, &sbsLen);
:
첫째, 나는에 의해 SO_SNDBUF의 크기를 감지 내 코드의 관련 부분.
마지막으로 버퍼가 꽉 차면 소켓에 씁니다.
if (sndBufferSize - NbBytesInBuffer < HEADER)
sentSize = write(sendsockfd,sendBuffer,NbBytesInBuffer);
...
내 문제는 아직 언급되지 않았습니다. 위의 모든 내용은 데이터를 다시 보내고 싶을 때까지 완벽하게 작동합니다.
이제 가능한 최대 속도로 보내려고하기 때문에 나는 가능한 한 적게 기다려야합니다. (즉, 송신 버퍼가 비어있는 즉시 다시 보내야 함).
가장 좋은 방법으로 송신 버퍼를 다시 비우기 위해 write()
에 필요한 시간을 감지하는 방법은 무엇입니까?
P. 임의의 시간을 기다리라고 말하지 마십시오 (예 : usleep(10000);
)
'선택'을 고려 했습니까? – Jarod42
수신기가 하나뿐입니다. 나는 내 질문을 편집했다. – Moi
'select'는 하나의'fd'와 함께 작동하고, 특정'fd'를 읽거나 쓸 수 있는지, 그리고 * timeout *이 있는지를 알 수 있습니다. – Jarod42