Портативная проверка подключения неблокирующего разъема - PullRequest
0 голосов
/ 10 апреля 2019

У меня интересная проблема с различиями в реализациях select и poll в Windows / Linux.Сначала я начну с Windows, так как там все работает как положено ...

В Windows я создаю неблокирующий сокет, пытаюсь подключиться и проверить, было ли установлено соединение.вызов select(0, nullptr, &wset, nullptr, nullptr), и в Windows это вернет 0, если нет соединения.Проблема решена.

Теперь в Linux это возвращает 1 и сообщает, что сокет находится в wset, так что похоже, что я могу писать в него, но если я вызываю send, я, очевидно, получаю SIGPIPE.Моя следующая попытка была poll с запросом POLLOUT, и интересным моментом является то, что я получаю POLLHUP и POLLOUT.Просто POLLOUT скажет мне, что я могу send, но POLLHUP будет означать, что сокет не подключен, но у меня сейчас вопрос: это надежный способ дешево проверить, если send потерпит неудачу, или я должен просто выдать фиктивную send размером 0, и, если она выйдет из строя, сообщить о сокете как об отказе (так как он никогда не восстановится?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...