cir*_*sio 4 c sockets network-programming
所以,我有一个试图与服务器连接的客户端。从配置文件中检索 IP 和端口。如果配置文件中的某些内容不正确,我需要程序顺利失败。我使用以下代码连接到服务器
if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1)
{
perror("client: connect");
close(sockfd);
continue;
}
Run Code Online (Sandbox Code Playgroud)
如果用户尝试连接到子网上不接受连接(即不存在)的服务器,则程序将失败并显示No route to host. 如果程序尝试连接到不在子网上的服务器(即配置错误),则程序在connect()调用时挂起。我做错了什么?我需要这个来向用户提供应用程序失败的一些反馈。
你没有做错任何事。TCP 设计用于面对网络问题时的可靠性,因此如果它没有得到对其初始连接请求的响应,它会重试几次,以防请求或响应在网络中丢失。Linux 上的默认参数导致它需要大约一分钟才能放弃。然后它会报告一个带有Connection timed out错误的失败。
如果您想更快地检测到故障,请参阅C: socket connection timeout