C++ connect()在连接被拒绝时长时间挂起

C++ connect()在连接被拒绝时长时间挂起,c++,linux,sockets,C++,Linux,Sockets,我有一个小的代理,可以随时连接到服务器 第一阶段,它打开一个插槽: 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 * connec

我有一个小的代理,可以随时连接到服务器 第一阶段,它打开一个
插槽

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地址
无效时,连接似乎会挂起很长时间 失败前

查看这些数据可以提供有关该主题的一些数据,但不能提供如何跨越它的数据


我的问题是为什么以及如何为它(或任何其他解决方案)添加超时

将套接字置于非阻塞模式,直到连接完成,然后在连接建立后将其重新置于阻塞模式


“连接被拒绝”在几秒钟内发生。你是说“连接超时”吗?“我有一个小代理”-如果它是你应用程序中的一个子系统,你能不能把它全部线程化?我有许多虚拟机请求服务器更新/信息,这部分在连接之前对连接进行“验证”,这完全是浪费时间。你应该只是联系,而不是试图预测未来。@EJP我尊重你的意见,但你错了。正确的做法是将这个问题标记为另一个问题的重复,而不是引用另一个问题的答案。您甚至没有引用最佳答案,因为其他几个答案解释了如何实现超时,但您引用的答案没有。