当我尝试使用非阻塞套接字连接到服务器时(以便我可以使用带有超时参数的 select()),我意识到在连接到被 iptables 使用 -j REJECT 阻塞的端口时,select() 等待直到超时参数,但最多为 3s .. ICMP 端口不可达数据包真的很快也没关系。
fcntl(sockfd, F_SETFL, O_NONBLOCK);
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
if (select(sockfd + 1, NULL, &fdset, NULL, NULL) == 1) {...}
在上面的示例中,如果连接到 localhost:1234 并且端口被阻塞,则 select() 阻塞直到 3 秒,如上所述。
有谁知道为什么这个 3 秒的超时会导致“连接被拒绝”?我该如何调整它(因为我的 ICMP 端口在 0.02 毫秒后无法访问)?