Ошибки сокета 10 048 на клиенте? Возможные причины?

Я пишу пользовательский сервер TCP и клиент, и при выполнении тонны запросов (60,000, чтобы быть точным) я начинаю получать эту ошибку сокета 10 048, который должен означать, что "адрес уже используется".

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

Это не имеет смысла, хотя, эта ошибка только обычно происходит при привязке, и эта ошибка происходит на клиенте а не сервере. Каковы могли быть возможные причины для него?

Маленькая выборка моей инициализации:

TcpClient client = new TcpClient();
client.Connect("XXXXX -- some ip", 25000);
client.NoDelay = true;
NetworkStream clientStream = client.GetStream();

Кроме того, все остальное, кажется, хорошо работает (включая количество времени, которое это занимает для отправки назад и вперед), и это работает отлично при использовании 127.0.0.1 но при помещении его на другой компьютер LAN я начинаю получать 10 048 ошибок.

Есть ли что-то не так с тем, как я инициализирую его? Что еще могло вызвать эту ошибку на стороне клиента?

5
задан Earlz 29 March 2010 в 20:22
поделиться

2 ответа

См. http://msdn.microsoft.com/en-us/library/e160993d%28v=VS.90%29.aspx SetSocketOption. Вам нужен DontLinger или ReuseAddr, или оба, я не уверен. В основном ваши сокеты застревают в состоянии TIME_WAIT на некоторое время после того, как вы разорвали TCP-соединение, как только вы получите их достаточно, вы не сможете создавать какие-либо новые клиентские подключения. Проверьте это с помощью вывода программы netstat -na.

Вы также можете сократить время, в течение которого сокет остается в состоянии TIME_WAIT, изменив его в реестре : http://msdn.microsoft.com/en-us/library /aa560610%28BTS.20%29.aspx По умолчанию - 4 минуты, которые, вероятно, можно безопасно сократить до 1 или 2 минут, особенно для тестирования.

Отказ от ответственности: я ни в коем случае не гуру TCP.

9
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: