【问题标题】:winsock reset after connection established建立连接后winsock重置
【发布时间】:2011-05-29 10:20:49
【问题描述】:

我遇到了关于 WinSock 的问题。情况如下:

在 LAN 中,不同的子网,服务器使用非阻塞套接字侦听端口,1000 个客户端连接到服务器,也是非阻塞的。网络数据包捕获显示几乎所有连接都已建立,但服务器在三次握手完成后的几毫秒内调用 accept() 之前重置了连接。此问题仅出现在大量客户端中,当我将客户端数量减少到 100 时,没有重置。

在没有任何其他操作的情况下建立连接后发生连接重置是否有任何原因?

注意:我已经在谷歌上搜索过这个问题,但没有帮助。而且,当然,SO_LINGER 没有在 Server 中使用。即使在Server中使用了SO_LINGER,但是accept()还没有被调用,也没有任何意义!

这需要我两天时间,所以如果您的建议对我有所帮助,您无法想象是多么感激!

【问题讨论】:

    标签: tcp winsock


    【解决方案1】:

    您在侦听套接字上配置了什么侦听积压?

    很可能太低了。

    测试 1000 次并发连接尝试真的很现实吗?

    我在我的博客上谈到了为服务器连接测试设定切合实际的目标:http://www.serverframework.com/asynchronousevents/2010/10/how-to-support-10000-or-more-concurrent-tcp-connections---part-2---perf-tests-from-day-0.html

    【讨论】:

    • 感谢您的建议,但我有点困惑。我将 backlog 配置为 1000,是否太大,所以 API 将值截断为最大队列长度(几百)?而且,MSDN 说“如果连接请求到达并且队列已满,客户端将收到一个错误,指示 WSAECONNREFUSED。”我想这意味着新连接不会成功,但是在我的应用程序中,连接在三次握手完成后重置。再次感谢
    • 是的,您更有可能被拒绝连接。您可能只是无法以某种方式处理新的连接?另外,您的客户端和服务器之间有哪些网络硬件?
    • 这是我的公司,我不知道具体是什么硬件。服务器运行在 Windows 2003 Server 系统上,这会影响 tcp 连接吗?我的意思是,操作系统是否有任何限制导致此问题?
    • 哦,可能网关、客户端和服务器在不同的子网中
    • 可能是路由器。如果您在服务器机器和客户端机器上运行 WireShark,您会看到什么?客户端机器发送 RST 还是只显示在服务器机器的 WireShark 日志中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2011-09-03
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多