Поддерживает ли soxLib VxWorks параметр SO_RCVTIMEO, который может использоваться setsockopt для установки времени ожидания вызова recv, как в winsock? - PullRequest
1 голос
/ 28 июня 2011

Поддерживает ли soxLib VxWorks параметр SO_RCVTIMEO, который может использоваться setsockopt для установки времени ожидания вызова recv, как в winsock?

Вот пример вызова в Windows:

int timeout = 30000; // 30 seconds
status = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(int));

Смущает то, что состояние, возвращаемое setsockopt, не указывает на ошибку от неизвестной опции, а SO_RCVTIMEO определен в sockets.h.Вызов все еще не производит желаемого действия, хотя, и я не могу найти никакой документации, говорящей, что это поддерживается.

Если это не поддерживается, какие-либо предложения для эквивалентного подхода?

IЯ использую VxWorks 5.4.Мне было бы интересно узнать, работает ли он в более поздней версии.

1 Ответ

0 голосов
/ 09 апреля 2012

Я не могу ответить на этот вопрос напрямую, но могу сказать, что для решения подобных проблем типа «получение блокировок» используйте функцию select (), чтобы указать время ожидания при ожидании входящих данных сокета. Тогда вы можете полностью избежать блокирующего вызова recv (), пока не узнаете, что в сокете есть данные.

Я рекомендую это решение для VxWorks (#include "selectLib.h"), а также для библиотек сокетов Linux и Windows. SO_RCVTIMEO полезен, но select () еще более полезен для всех операционных систем.

...