2012-04-10 2 views
11

Я новичок в сокетах python и очень обеспокоен упрямством метода socket.accept(). Мне действительно нужен способ завершения метода socket.accept() или любой другой альтернативы socket.accept(), который выполняется только один раз. Plzzzz кто-то помогает.Как остановить вызов python socket.accept()?

+2

Вы должны проверить функцию 'socket.setblocking' и модуль' 'select' '(http://docs.python.org/library/select.html). –

ответ

10

У вас есть несколько вариантов здесь:

  1. Закрыть слушающий сокет из другого потока - accept() вызовет исключение, если это не удается.
  2. Откройте локальное подключение к гнезду для прослушивания, что позволяет вернуть accept() по дизайну.
  3. Используйте механизм принятия, который может блокировать более чем один объект синхронизации, чтобы ожидание могло быть передано без возврата.
  4. Используйте неблокирующую альтернативу accept(), (асинхронно, как AcceptEx() и перекрытие ввода-вывода в Windows).
+0

В Python 'accept' будет вызывать исключение, если оно терпит неудачу. –

+0

@NiklasB. - благодаря. У меня нет ни одного Python, но вопрос OP скорее является общей проблемой TCP-сервера, и тот же набор «трюков» необходим на всех языках. –

+0

Можете ли вы привести пример, потому что, как сказано ранее, я новичок ... Я на самом деле пишу сервер в pygtk. Моя проблема в том, что окно зависает из-за вызова socket.accept(). – cybernerd

Смежные вопросы