Что такое тайм-аут подключения для сокета в Linux - PullRequest
0 голосов
/ 03 июня 2010

У меня есть программа, работающая на Linux Ubuntu, которая пытается подключиться к порту сервера с помощью TCP. Подскажите, пожалуйста, как я могу узнать, каково значение времени ожидания для клиентского сокета, подключаемого к серверному сокету для Ubuntu?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 июня 2010

Лучшее портативное решение - использовать собственный тайм-аут, чтобы убедиться, что вы можете положиться на известное значение:

1) перед connect() ing установите клиентский сокет неблокирующим. Используйте ioctl() и флаг FIONBIO или fcntl() и O_NONBLOCK. Под Win32 используйте ioctlsocket() и FIONBIO flag.

2) connect() к удаленному узлу: если connect() успешно, все в порядке, вы подключены.

3) Однако, если connect() возвращает -1 и задает errno равным EINPROGRESS (WSAEWOULDBLOCK под Win32), просто select() дескриптор сокета для записи с вашим собственным временем ожидания.

1 голос
/ 03 июня 2010

Начну с просмотра справочной страницы getsockopt(3) ( SO_RCVTIMEO ). Тем не менее, я уверен, что это еще не все.

...