连接() 在连接被拒绝时长时间挂起

connect() hang for long time upon connection refused

本文关键字:连接 长时间 挂起 拒绝      更新时间:2023-10-16

我有一个应该不时连接到服务器的小代理 第一阶段它打开一个socket

const char* hostname // e.g. "127.0.0.1"   
hostaddr = inet_addr(hostname);
/* Ultra basic "connect to port 22 on localhost"
* Your code is responsible for creating the socket establishing the
* connection
*/ 
sock = socket(AF_INET, SOCK_STREAM, 0);
sin.sin_family = AF_INET;
sin.sin_port = htons(22);
sin.sin_addr.s_addr = hostaddr;
if (connect(sock, (struct sockaddr*)(&sin),
sizeof(struct sockaddr_in)) != 0) {
fprintf(stderr, "failed to connect!n");
return -1;
}

ip-address无效时,连接似乎挂起很长时间 失败之前

查看手册页提供了有关该主题的一些数据,但没有提供如何覆盖它

我的问题是为什么以及如何为它添加超时(或任何其他解决方案(

引自此处的答案之一

将套接字置于非阻塞模式,直到连接完成,然后在建立连接后将其重新置于阻塞模式。