Сецокопт 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
приписывать.