Сецокопт Windows не работает? - PullRequest
       13

Сецокопт Windows не работает?

2 голосов
/ 28 апреля 2009

Я хочу иметь возможность повторно использовать некоторые порты, и поэтому я использую setsockopt на своих сокетах со следующим кодом:

sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

Однако на самом деле это не работает. Я также не получаю ошибку привязки, но серверный сокет просто не отвечает (кажется, что он запускается, но если я пытаюсь подключиться к нему, он не входит в цикл выбора). Это происходит, если сценарий неожиданно завершился, и если я изменил порт, который прослушивает сервер, все снова работает. Можете ли вы дать совет?

РЕДАКТИРОВАТЬ: я переименовал сокет в носок. Это было просто имя, которое я выбрал для этого фрагмента кода.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Похоже, что SO_REUSEADDR имеет различную семантику в Windows и Unix.

См. статью MSDN (в частности, приведенную ниже таблицу "Использование SO_EXCLUSIVEADDRUSE") и этот unix faq .

Также см. Это обсуждение ошибки Python , это обсуждение искаженной ошибки и этот список различий между сокетами Windows и Unix .

1 голос
/ 28 апреля 2009

setsockopt - это метод объекта сокета. модуль socket не имеет атрибута setsockopt.

...