Я создаю системные тесты на компьютере с Windows7, используя python, в котором мне нужно открывать различные сокет-соединения с другими машинами. У меня также есть несколько виртуальных IP-адресов, добавленных к локальной машине.
Эти тесты иногда работают, но при быстром выполнении друг за другом я всегда сталкиваюсь со следующей ошибкой:
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
Эта проблема была опубликована пару раз, но, похоже, ни один ответ не решил проблему на моем компьютере. Вот более конкретная информация:
Каждый сокет, созданный в python, имеет следующий набор параметров:
setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Я также изменил записи
regedit
следуя подсказкам, чтобы избежать исчерпания портов, что не решает мою проблему.netstat -n
показывает только макс. 30 портов в состоянии «ESTABLISHED» или «TIME_WAIT» до номера порта 10000.Насколько я могу судить по коду, все соединения закрыты. Но даже если это не так, мне нужно, чтобы соединения были закрыты или немедленно использованы повторно.
Как я могу исправить эту проблему, чтобы избежать этой ошибки?
Текущая реализация кода:
def my_connect(self):
if self._socket:
self._socket.shutdown(socket.SHUT_RDWR)
self._socket.close()
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
time.sleep(0.5)
self._socket.bind((self._bind_address, self._bind_port))
self._socket.connect(self._address)
return