+ /* This implements a timeout for connect by opening the connection
+ nonblocking */
+ fd_set wfds;
+ FD_ZERO(&wfds);
+ FD_SET(ServerFd,&wfds);
+ struct timeval tv;
+ tv.tv_sec = TimeOut;
+ tv.tv_usec = 0;
+ int Res = 0;
+ if ((Res = select(ServerFd+1,0,&wfds,0,&tv)) < 0)
+ return _error->Errno("select","Select failed");
+ if (Res == 0)
+ return _error->Error("Could not connect, connection timed out");
+ unsigned int Err,Len=sizeof(Err);
+ if (getsockopt(ServerFd,SOL_SOCKET,SO_ERROR,&Err,&Len) != 0)
+ return _error->Errno("getsockopt","Failed");
+ if (Err != 0)
+ return _error->Error("Could not connect.");
+