c++ - connect() 在连接被拒绝时挂起很长时间
问题描述
我有一个小代理,它应该不时连接到服务器,第一阶段它打开一个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
无效时,连接似乎在失败之前挂了很长时间
查看手册页提供了有关该主题的一些数据,但没有提供如何超越它
我的问题是为什么以及如何为它添加超时(或任何其他解决方案)
解决方案
引用这里的答案之一
将套接字置于非阻塞模式直到您连接,然后在连接建立后将其恢复为阻塞模式。
推荐阅读
- asp.net-core - Asp.Net Core 中的 [FromForm] 和 [FromBody] 有什么区别
- python - 根据其他列范围的总和返回值的跟踪器列
- html - 如何在 CSS 中表示 Checkers 棋子?
- javascript - 根据view.py中的if/else语句显示一行html代码
- javascript - 在日期选择器关闭时调用函数,当我仅在日期选择器外部单击时
- javascript - 在 puppeteer 和 express 中发送 json 时出错
- javascript - 反应:在 useEffect 挂钩内调用 addEventListener() 时返回错误
- c# - 无论输入/返回类型如何,都将另一个方法作为参数的 C# 方法
- c# - Xamarin LongClick switch 语句不起作用
- javascript - 如何让我的应用显示计时器并让用户输入自己的输入?