2

我想减少 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
}

谢谢

4

2 回答 2

3

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

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

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

于 2012-05-11T18:55:11.513 回答
1

执行此操作的标准方法分为两个步骤:

  1. 使用 O_NONBLOCK 连接()
  2. 使用 select() 超时
于 2012-05-11T19:00:14.460 回答