Я создаю системные тесты на компьютере с 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

0