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

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

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

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

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

2 ответа

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

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

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

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

Другие вопросы по тегам