connect(..)関数はハングするだけで、ERROR/Successを返すことはありません。したがって、クライアントは接続が確立されるのを長時間待機しています。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;
}
}
}