【发布时间】:2020-09-17 03:45:25
【问题描述】:
我需要澄清一些事情。我正在用 C 语言制作服务器/客户端 TCP 程序。
如果客户端尝试连接(使用 connect())而服务器没有卡在 accept() 中,会发生什么?我是说,什么时候忙? connect() 返回什么?
编辑:
我在 Linux 环境中。
if (connect(...) < 0) {
// ERROR AND LEAVE
}
这就是我在我的客户中所做的。根据我的阅读和学习,如果服务器很忙并且不接受,connect() 应该稍等片刻,然后返回 -1,如果服务器仍然很忙。那正确吗?
如果是这样,我该如何避免那个“小问题”?我希望它立即返回 -1。
【问题讨论】:
-
查看
connect(2)的手册,它应该为您提供有关connect返回的内容以及它在errno中设置的错误值的所有信息。 -
根据
the connect documentation,返回值表示连接是否成功 -
在 linux 上:连接正常阻塞,直到连接建立或经过一些未进一步指定的超时。在后一种情况下,它返回 -1 并相应地设置
errno。您可以通过使套接字变为非阻塞来更改此默认行为,但这是另一回事。 -
非常感谢!你介意看看我的编辑吗? @mrksngl
-
“一点点”,正如我所说,没有进一步说明。我认为这取决于一些系统范围的参数。此外,如果返回 -1,并不意味着服务器很忙。它也可能不可用或发生了其他事情。您必须在手册页中查找可能的错误,就像其他人建议的那样。我也说过你可以改变行为,但即便如此:你并不真的喜欢“立即”返回:你必须给服务器(或者更好:整个网络系统)一些时间来实际建立连接。