принять (2) без прослушивания (2) - PullRequest
1 голос
/ 22 марта 2011

Мне было интересно, есть ли способ принять соединение, не прослушав его сначала?
В качестве альтернативы, есть ли способ повторно использовать прослушивающий сокет в качестве принятого сокета?

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Нет и нет.

Гнездо не переведено в режим прослушивания, пока вы не наберете listen(). Надо слушать, чтобы accept(). И, как только вы слушаете, вы не можете преобразовать сокет в подключенный сокет. Вы можете закрыть сокет прослушивания и использовать dup2, чтобы «переименовать» подключенный сокет fd в используемый сокет прослушивания - но я думаю, что вам следует пересмотреть свой дизайн, если вам это нужно.

0 голосов
/ 22 марта 2011

Нет, не в сокете API.Если только dup2 для копирования принятого сокета на номер прослушивающего сокета вам не поможет.

 that is

 f1 = socket
 listen(f1
 f2 = accept(f1
 dup2(f2, f1)
 close(f2)

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

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