Ошибки сокета 10048 на клиенте? Возможные причины? - PullRequest
5 голосов
/ 30 марта 2010

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

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

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

Небольшая выдержка из моей инициализации:

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

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

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

Ответы [ 2 ]

9 голосов
/ 30 марта 2010

См. 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.

0 голосов
/ 30 марта 2010
...