проблема: ошибка сокета [адрес уже используется] в python / selenium - PullRequest
2 голосов
/ 30 мая 2011

У меня неприятная проблема Ошибка socket.error: [Errno 10048]: адрес уже используется. Только одно использование каждого адреса сокета (протокол / IP-адрес / порт) обычно разрешено во время автоматических тестов с использованием Selenium с Python. Проблема настолько интересна, что она работает на одном компьютере (Linux) работает правильно, но на другом компьютере (WindowsXP) генерирует эту ошибку. Я бы добавил, что проблема возникла после переустановки системы и настройки заново - с предыдущей конфигурацией все работало правильно. Может быть, я что-то забыл? Кто-нибудь сталкивался с такой проблемой раньше?

У кого-нибудь есть идеи, как бороться с этой проблемой?

Текущая конфигурация / библиотеки:

python 2.7, numpy, selenium.py

Ответы [ 4 ]

1 голос
/ 31 мая 2011

Я нашел ответ в посте ниже:

Python urllib2.URLError:

Оказалось, что эта проблема является ограничением Windows

1 голос
/ 30 мая 2011

Если вы открываете / закрываете сокет несколько раз, он может находиться в состоянии TIME_WAIT.Это объясняет, почему он действует по-разному на разных платформах (разные настройки TIME_WAIT и стек TCP).Если вы управляете объектом сокета, вы можете установить SO_REUSEADDR перед связыванием, чтобы решить проблему.

Например:

sock = socket.socket()
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, server.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1)

Вы можете запустить netstat -b из командной строки, чтобы получитьвам список открытых сокетов с состоянием и процессом владения.

0 голосов
/ 30 мая 2011

Может быть, в вашей Windows есть программное обеспечение, которое уже использует порт 4444, вы можете попробовать установить Selenium на другой порт и повторить попытку?

0 голосов
/ 30 мая 2011

Есть несколько возможностей. Если ни один из ваших тестов не может прослушивать какой-либо порт (вы не говорите, какой порт), то, возможно, ваша машина Windows работает на порте, который вы ранее открывали; эта новая служба могла появиться во время переустановки. Если, с другой стороны, это проблема только для некоторых тестов или она немного спорадическая, то это может быть либо проблема программирования (забыв закрыть сокет в раннем тесте, который мешает более позднему), либо проблема синхронизации (сокет предыдущего теста не совсем закрывается, прежде чем новый пытается открыть). Очевидно, есть разные способы решения каждой из этих проблем, но я не думаю, что мы можем помочь больше, чем это, без более подробной информации.

...