Если вы используете сокет в режиме блокировки, то использование select()
для ожидания поступления данных, прежде чем вызывать recvfrom()
, является одним (и более распространенным) подходом, но другой подход заключается в использовании setsockopt()
для установкиопция сокета SO_RCVTIMEO
, которая устанавливает тайм-аут для блокировки операций чтения (см. SO_SENDTIMEO
для блокировки операций отправки).Затем вы можете вызвать recvfrom()
и дать ему время для внутреннего ожидания.
Если вы используете сокет в неблокирующем режиме, вы можете получать асинхронные FD_READ
уведомления, используя WSAASyncSelect()
или WSAASyncEvent()
.Не нужно ждать тайм-аутов.
Если вы используете сокет в режиме наложения, вы можете получать уведомления асинхронного чтения из WSARecvFrom()
, используя WSAGetOverlappedResult()
или GetQueuedCompletionStatus()
.Не нужно ждать тайм-аутов.