gpt4 book ai didi

c - 使用 listen(1) 的套接字上的两个(错误的)连接

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:43 24 4
gpt4 key购买 nike

我正在使用 C++ 开发两个使用 C Linux 套接字调用的应用程序,一个服务器和一个客户端。服务器监听特定端口 A 并使用 accept 函数检索连接。我正在使用 int result =::listen(mySocketFileDescriptor, 1);将最大连接数限制为 1。顺便说一句,在服务器中,我使用 SO_REUSEADDR 选项出于其他原因重用套接字。

如果与客户端有多次断开/连接,有时会发生奇怪的行为:例如,客户端成功连接到服务器,但是当它发送数据时,服务器没有收到任何东西。

在客户端应用程序中,我使用 Linux 自动分配的端口连接到端口 A,我们称它为 B。使用 netstat 我发现客户端从套接字连接到服务器到端口 A使用端口 B 和另一个使用另一个端口 C. 我已经调试并且我已经看到服务器从使用 B 的套接字读取,而客户端在使用 C 的套接字上写入。

知道这种行为的原因吗?

除了我的代码可能存在的任何可能的逻辑问题之外,是否有可能使服务器建立新连接时总是丢弃旧连接?有什么我可以设置的选项吗?

提前致谢!

最佳答案

您需要阅读 listen manual page更彻底,因为“限制”不是可以与该套接字建立的最大连接数,它是在您调用 accept 之前可以同时尝试连接的连接数的限制。一旦您调用 accept,就可以建立另一个连接。

许多示例中的“标准”值是 5,但这些服务器可以处理数百个连接。

关于c - 使用 listen(1) 的套接字上的两个(错误的)连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com