2010-03-08 4 views
1

глупая проблема. Я получаю их от клиента, подключающегося к серверу. К сожалению, настройка осложняет создание комплекса отладки - и у нас заканчиваются варианты.TCP: адрес уже используется Исключение - возможные причины для клиентского порта? NO PORT EXHAUSTION

Окружающая среда: * Система клиент/сервер, работающая на одной машине. Клиент на самом деле является службой, выполняющей некоторые манипуляции с базами данных в определенное время. * Cnonection исходит от C#, проходящего через OleDb, к драйверу JSBC EasySoft для настраиваемого JDBC-сервера, который затем использует логику на C++. Да, compelx - но сторонний поставщик решил разоблачить механизмы расширения для своего сервера через интерфейс JDBC. Не так много можно сделать здесь;)

Симптом: На регулярных промежутках времени (ir) мы получаем сообщение «Используемый адрес: connect», указанный из драйвера JDBC. Кажется, они происходят из одной конкретной службы, которую мы запускаем.

Теперь я все прочитал об истощении порта. Вот почему у нас сейчас есть небольшой инструмент, который подсчитывает порты и их состояния каждую минуту. В прошлый раз, когда это произошло, у нас было поразительное 370 портов в использовании, при этом счет увеличился примерно до 900 ПОСЛЕ ошибки. Мы запустили реестр (это машина Windows), чтобы разрешить больше, чем 5000 клиентских портов, но даже тогда мы далеки от этого предела для начала.

Вот почему я прошу здесь. Ayneone, какой бы ELSE мог это сделать?

Это компьютер с Windows 2003 Server, 64 бит. Единственное, что я вижу, это может привести к его (но эта функция якобы отключена) - это Symantec Endpoint Protection, установленная на сервере, и она может быть активирована как брандмауэр, она может перехватить сетевой трафик. Я не хочу открывать банку червей, преждевременно указывая на Symantec (если указывать на Symantec, это можно рассматривать как таковое). Итак, кто-нибудь знает, что еще может быть причиной?

Благодаря

ответ

1

«Адрес уже используется», он же WSAEADDRINUSE (10048), означает, что, когда клиентский сокет готов подключиться к сокету сервера, он первым попытался привязать себя к конкретному локальному IP/Port пара который уже использовался другим сокетом, либо активным, либо закрытым, но все еще находящимся в состоянии FD_WAIT. Это не имеет никакого отношения к количеству доступных портов.

+0

... и это то, что клиенты редко должны когда-либо делать. Нет никаких преимуществ и нескольких недостатков, в том числе и этого. – EJP

+0

Это неправильно. Клиент работает нормально и использует случайный порт - это можно увидеть (если мы не получим глупую один раз в неделю ошибку здесь). Тесты нагрузки в нашей тестовой среде работают с 20-кратной нагрузкой. Ошибка ALSO связана с истощением порта. Проверьте, например, https://www.socketlabs.com/support/index.php?_m = База знаний и _a = viewarticle & kbarticleid = 23 или http://forums.parasoft.com/index.php?showtopic=435 И это то, что мы не впадать в соответствии с нашей собственной программой регистрации сброса всех состояний сокета каждую минуту , – TomTom

-1

У меня такая же проблема на Windows 2000 Server с приложением .Net, подключающимся к SQL Server 7.0. Там, как 10 серверов с одинаковой конфигурацией, и только одна показывает эту ошибку несколько раз в день. С помощью небольшой тестовой программы я могу воспроизвести ошибку, просто установив соединение TCP на прослушивающем порту SQL Server. Запуск CurrPorts (http://www.nirsoft.net/utils/cports.html) показывает, что по-прежнему доступно множество доступных портов в диапазоне 1024-5000.

У меня нет идей и хотелось бы узнать, нашли ли вы решение, так как вы отправили свой вопрос.

Редактировать: Я наконец нашел решение: червь присутствовал на сервере (WORM_DOWNAD.A) и исчерпал локальные порты, не будучи замеченным.