C++ cpp中的socket connect(..)函数只是挂起,除了第二个请求成功外,不会返回任何内容

C++ cpp中的socket connect(..)函数只是挂起,除了第二个请求成功外,不会返回任何内容,c++,connect,C++,Connect,connect(..)函数只是挂起,从不返回错误/成功。因此,客户端等待建立连接的时间很长。是否有任何方法可以至少为connect()函数设置超时或使其返回某些内容 struct sockaddr_in server_in; server_in.sin_port = htons(port); server_in.sin_family = AF_INET; server_in.sin_addr.s_addr = resolveName(host);

connect(..)函数只是挂起,从不返回错误/成功。因此,客户端等待建立连接的时间很长。是否有任何方法可以至少为connect()函数设置超时或使其返回某些内容

struct sockaddr_in server_in;
        server_in.sin_port = htons(port);
        server_in.sin_family = AF_INET;
        server_in.sin_addr.s_addr = resolveName(host);
        if(server_in.sin_addr.s_addr == 0) {
            log("Failed to resolve the host name %s\n"), host))
            return FAILURE;
        }
        // Create a socket of type stream
        int socketNumber = socket(AF_INET, SOCK_STREAM, 0);
        if (socketNumber < 0) {
            log("Failed creating socket"); 
            return FAILURE;
        }

        int retriesLeft = 3;
        bool connected = false;
        {
            string totalConnectTimeMsg = "Total time taken to connect to printer ";
            totalConnectTimeMsg += host;
            EggTimer totalConnectTime (0,0, totalConnectTimeMsg.c_str() ,0, 0); 
            while (retriesLeft > 0 && !connected) {
                // Set up a connection with the server.
                if (connect(socketNumber, (struct sockaddr *) &server_in, sizeof(server_in)) < 0) {
                    log("Failed conneting to the server(printer)\n"); 

                    retriesLeft--;
                    log("[%s:%u] sleeping for %d microseconds", __FUNCTION__, __LINE__, 5000000);
                    usleep(5000000);
                } else {
                    connected = true;
                }
            }
        }
struct sockaddr\u in server\u in;
服务器\u in.sin\u端口=htons(端口);
服务器\u in.sin\u family=AF\u INET;
服务器\u in.sin\u addr.s\u addr=resolveName(主机);
if(服务器地址=0){
日志(“未能解析主机名%s\n”),主机)
返回失败;
}
//创建stream类型的套接字
int socketNumber=套接字(AF_INET,SOCK_STREAM,0);
if(插座编号<0){
日志(“创建套接字失败”);
返回失败;
}
int retriesLeft=3;
布尔连接=假;
{
string totalConnectTimeMsg=“连接到打印机所用的总时间”;
totalConnectTimeMsg+=主机;
EggTimer totalConnectTime(0,0,totalConnectTimeMsg.c_str(),0,0);
while(retriesLeft>0&!已连接){
//设置与服务器的连接。
if(connect(socketNumber,(struct sockaddr*)&server_-in,sizeof(server_-in))<0{
日志(“连接到服务器(打印机)失败)\n”);
retriesLeft--;
日志(“[%s:%u]休眠%d微秒”,_函数_uuuuuuuuuuuuuuuuuuuuuuu线uuuuuuu5000000);
美国LEEP(5000000);
}否则{
连接=真;
}
}
}

<代码>连接> <代码>不是标准C++,而是类似于POSIX的东西,它可能对你的环境有更多的解释,因为在某些环境下行为可能不同。鸡蛋煮熟后,鸡蛋定时器会火吗?(我不使用connect,但在cURL或.NET Framework中,我看到了类似的问题):挂起网络功能通常意味着防火墙或防病毒软件会阻止您。问题是,如果connect()是被阻止的调用,是否有任何方法可以设置超时?我不希望我的客户端等待connect()的执行在失败时返回长时间。为什么不异步连接?