Мне трудно воспроизвести это, поскольку он не зависает на Mac OS X или Windows 7 с Python 2.7. Поэтому, не имея возможности воспроизвести, я предполагаю, что есть проблема с повторным использованием serversocket
, так что вскоре после его закрытия в вашей ОС. Закрытие сокета переводит этот сокет в состояние TIME_WAIT
, поэтому он не закрывается немедленно. Время, необходимое для реального закрытия сокета, зависит от операционной системы и может быть причиной вашей проблемы.
Хотя люди, похоже, рекомендуют не использовать его, вы можете использовать опцию SO_LINGER, чтобы принудительно закрыть сокет.
Например:
l_onoff, l_linger = 1, 1 # send RST (hard reset the socket) after 1 second
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER,
struct.pack('ii', l_onoff, l_linger))
# this should now complete after l_linger timeout
serversocket.close()