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