Я пишу пользовательский сервер 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 ошибок.
Есть ли что-то не так с тем, как я инициализирую его? Что еще могло вызвать эту ошибку на стороне клиента?
См. 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.
У вас заканчиваются клиентские порты?
http://www.gavaghan.org/blog/2010/02/17/tcpip-parameter -tuning-for-quick-client-connections /
Возможный связанный вопрос: Максимальное количество одновременных подключений на одном порту (сокете) сервера