Я пытаюсь ограничить свою сеть только одним приемником.
Во-первых, я определяю размер 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()
, чтобы повторно очистить буфер отправки (наиболее оптимальным образом)?
P.S. Пожалуйста, не говорите мне ждать произвольное время (например, usleep(10000);
)
select
? - person Jarod42   schedule 28.12.2014select
также работает с однимfd
, может сказать, можете ли вы читать или писать в определенныйfd
и имеет тайм-аут. - person Jarod42   schedule 28.12.2014