首页 > 解决方案 > 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无效时,连接似乎在失败之前挂了很长时间

查看手册页提供了有关该主题的一些数据,但没有提供如何超越它

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

标签: c++linuxsockets

解决方案


引用这里的答案之一

将套接字置于非阻塞模式直到您连接,然后在连接建立后将其恢复为阻塞模式。


推荐阅读