Определить, было ли установлено соединение - PullRequest
0 голосов
/ 15 ноября 2009

Я недавно начал изучать сетевое программирование под Linux, и, похоже, я не могу найти правильный способ определить, было ли установлено соединение с удаленным хостом. В ATM все неустановленные соединения регистрируются в экземпляре epoll. Как только происходит событие с флагом EPOLLOUT, установленным в 1, соединение помечается как установленное. Это так просто, но я все делаю правильно ...

Есть ли лучший способ сделать это? А если нет, то является ли ожидание того, что сокет станет доступным для записи, - это хороший способ гарантировать, что соединение установлено?

1 Ответ

0 голосов
/ 10 декабря 2009

poll / epoll / select должно все работать. Man-страница для connect (2) говорит о том, что вы получаете EINPROGRESS, и что вы можете определить завершение, используя select или poll, чтобы проверить его на доступность для записи. Затем используйте getsockopt, чтобы проверить состояние SOL_SOCKET, SO_ERROR, чтобы увидеть, было ли соединение успешным или неудачным.

Если вы повторите попытку подключения, пока она все еще пытается, вы получите EALREADY.

Так что это документированный способ сделать это, и звучит как раз для меня.

...