【发布时间】:2018-12-02 15:22:43
【问题描述】:
我有一个小代理,应该不时连接到服务器
第一阶段它打开一个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 无效时,似乎连接挂起很长时间
失败前
查看man page 提供有关该主题的一些数据,但不提供如何超越它
我的问题是为什么以及如何为其添加超时(或任何其他解决方案)
【问题讨论】:
-
“连接被拒绝”会在几秒钟内发生。您的意思是“连接超时”吗?
-
'我有一个小代理' - 如果它是你应用程序中的一个子系统,你能不把它全部关闭吗?
-
我有很多虚拟机从服务器请求更新/信息,本节在连接之前对连接进行“验证”
-
这完全是浪费时间。你应该只是联系,而不是试图预测未来。
-
@EJP 我尊重你的意见,但你错了