Возвращает ли метод Python 2.7 socket. accept () блокирующий сокет или неблокирующий сокет?
Используя модуль сокетов в Python 2.7:
1. Я получил объект сокета из гнезда.метод accept ().
2. я проверил тайм-аут объекта сокета, и он вернул -1.0. я думаю, это означает, что объект сокета находится в режиме блокировки.
3. однако, когда я вызываю метод recv на объекте сокета, я получаю ошибку:
[Errno 10035] неблокирующая операция сокета не может быть завершена немедленно
4. Эта ошибка имеет смысл только в том случае, если объект сокета не блокируется. Объект сокета должен блокироваться до тех пор, пока не поступят данные.
Почему объект сокета не блокируется, когда он должен быть блокирующим?
Примечание: Я установил тайм-аут на сокете, который вызвал метод accept (). Может ли это быть причиной того, что возвращаемый объект сокета также не блокируется? Если да, то я был бы благодарен услышать объяснение того, почему это происходит.
def wait_for_connection(self): connection, client_address = self.sock.accept() print 'connected to ' + str(client_address) self.connections.append(connection)
def read_from_connections(self): for connection in self.connections: try: command = connection.recv(1024) if command: print command except socket.error, error: print error # error 10035. print connection._sock.timeout # returns -1 if error.errno != errno.EWOULDBLOCK: raise
Что я уже пробовал:
Я попытался найти свойство blocking_mode где-то внутри объекта socket с помощью встроенного метода dir (), но безуспешно. Поэтому я использовал свойство timeout в качестве индикатора того, блокирует сокет или не блокирует. Пожалуйста, дайте мне знать, если это предположение неверно.