客户端上的套接字错误10048?可能的原因?

时间:2010-03-29 20:15:36

标签: c# networking sockets load-testing

我正在编写一个自定义TCP服务器和客户端,并且在执行大量请求时(确切地说是60,000)我开始得到10048的套接字错误,should mean“该地址已被使用。 “

错误一直在发生,除非我暂停这个过程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 个答案:

答案 0 :(得分:9)

请参阅http://msdn.microsoft.com/en-us/library/e160993d%28v=VS.90%29.aspx SetSocketOption。你需要DontLinger或ReuseAddr,或两者兼而有之,我不确定。拆除TCP连接后,基本上你的套接字卡在TIME_WAIT状态一段时间,一旦你得到足够的,你将无法创建任何新的客户端连接。使用netstat -na程序输出验证这一点。

您还可以通过更改套接字来减少套接字保持TIME_WAIT状态的时间 注册表: http://msdn.microsoft.com/en-us/library/aa560610%28BTS.20%29.aspx 默认值为4分钟,可安全地减少到1或2分钟,尤其是测试时。

免责声明:无论如何,我不是TCP大师。

答案 1 :(得分:0)