c - Socket : Connect will spend 2 minutes looking for IP before it timesOut. 如何减少该时间?

标签 c sockets timeout connect

我想减少 socket:connect 查找要连接的 IP/端口所需的允许超时时间?在某些使用 IP 10.0.0.x 的网络路由器(例如 Netgear)上,只需不到一秒就会超时。

注意:“选择”稍后出现

host = gethostbyname("xxx");//invalid IP, 

memcpy(&(sin.sin_addr), host->h_addr, host->h_length);
sin.sin_family = host->h_addrtype;
sin.sin_port = htons(4000);

s = socket(AF_INET, SOCK_STREAM, 0);
hConnect = connect(s, (struct sockaddr*)&sin, sizeof(sin));//sits here for 2 minutes before moving on to the next line of code

bConn = 0;// no connect
if (hConnect == 0) {
    bConn = 1;// connect made
}

谢谢

最佳答案

在调用 connect() 之前将套接字设置为非阻塞,然后执行 select()poll()它可以找出正在发生的任何事件。

注意:使用此设置,您将从 connect() 获得非零返回,并且 errno 设置为 EINPROGRESS connect() 的情况在没有连接的情况下返回,但仍在尝试执行。

有关详细信息,请参阅 connect() 手册页的 ERRORS 部分。

关于c - Socket : Connect will spend 2 minutes looking for IP before it timesOut. 如何减少该时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556360/

相关文章:

c - 我如何只让用户在 c 中输入一个字符

C 程序代码将整数拆分为单独行上的数字,仅循环而不使用数组

c - 串行通讯不工作。读取文件出错

python - 如何从 Django Channels 网络套接字数据包中获取当前用户?

ssl - NGINX + HTTPS 导致外部请求出现 504 Gateway Timeout 错误

c - 为什么 GDB 启动一个新的 shell 以及如何禁用此行为?

c - 如何在c中发送登录POST/GET请求并接收响应

c++ - UDP 数据包时间戳

c++ - 如何配置 HttpEndRequest 的超时?

cordova - 暂停应用程序时出现Phonegap cordova 2.7.0错误