Отключение сокета и повторная привязка - Как избежать длительного ожидания? - PullRequest
3 голосов
/ 28 февраля 2010

Я работаю с сокетом в python, и, находясь в стадии разработки, мне нужно часто убивать и перезапускать мою программу.

Проблема в том, что однажды убив мой скрипт на python, мне придется долго ждать, чтобы иметь возможность перепривязать сокет прослушивания. Вот фрагмент кода для воспроизведения проблемы:

#!/usr/bin/env python3                                                          

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 4321))
try:
    s.listen(5)
    while True:
        (a, b) = s.accept()
        print(a.recv(1000))
except KeyboardInterrupt:
    print("Closing")
    s.shutdown(socket.SHUT_RDWR)
    s.close()

Нажатие C-z запускает код исключения, вызывая функции shutdown и close, но я не могу перезапустить свою программу до истечения времени ожидания сокета (среда GNU / Linux).

Как мне этого избежать?

1 Ответ

4 голосов
/ 28 февраля 2010

Я не уверен, как это сделать в Python, но вы хотите установить опцию сокета SO_REUSEADDR.

...