Пример кода Apple:
bytesSent = sendto(
CFSocketGetNative(self->_socket),
sock,
[packet bytes],
[packet length],
0,
(struct sockaddr *) [self.hostAddress bytes],
(socklen_t) [self.hostAddress length]
);
чтобы изменить время ожидания:
CFSocketNativeHandle sock = CFSocketGetNative(self->_socket);
struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 100000; // 0.1 sec
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (void *)&tv, sizeof(tv));
bytesSent = sendto(
sock,
[packet bytes],
[packet length],
0,
(struct sockaddr *) [self.hostAddress bytes],
(socklen_t) [self.hostAddress length]
);
См. Документы Apple: setsockopt
Из вышеупомянутого документа:
SO_SNDTIMEO - это опция для установки значения времени ожидания для операций вывода. Он принимает параметр struct timbal с количеством секунд и микросекунд, используемых для ограничения времени ожидания завершения операций вывода. Если операция отправки заблокирована в течение этого времени, она возвращается с частичным счетом или с ошибкой EWOULDBLOCK, если данные не были отправлены. В текущей реализации этот таймер перезапускается каждый раз, когда в протокол доставляются дополнительные данные, подразумевая, что ограничение применяется к выходным частям, размер которых варьируется от отметки низкого уровня до отметки верхнего уровня для вывода.