1

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;
                }
            }
        }
4

0 回答 0