Может принять () возврат без получения соединения? - PullRequest
1 голос
/ 05 мая 2011

У меня есть блокирующий TCP-сокет, который блокируется при вызове accept(). Можно ли сделать возврат вызова accept() (кроме как получить соединение от клиента)? Это для закрытия сокета как части выключения системы и выхода из потока, который принимает соединения.

Ответы [ 3 ]

4 голосов
/ 05 мая 2011

1) В однопоточной программе вы можете использовать сигнал из другого процесса. Убедитесь, что вы НЕ передаете флаг SA_RESTART при установке обработчика сигнала.

2) Если вам нужно остановить accept() из другого потока того же процесса, создайте пару сокетов или канал и заблокируйте на select() свой сокет и этот канал. Когда вам нужно разблокировать, напишите что-нибудь в трубу.

3) Или просто используйте select() с небольшим тайм-аутом (1 секунда) и опрашивайте флаг выхода каждый раз, когда он возвращается.

2 голосов
/ 05 мая 2011

Используйте SOCK_NONBLOCK в параметре flags: http://www.linuxhowtos.org/manpages/2/accept.htm

0 голосов
/ 19 мая 2015

В окнах WSA отменит прием (прием будет возвращать INVALID_SOCKET), если вы закроете принимающее соединение (вызов closesocket ()).

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