int SockConnector::connect ( SockStream& stream, const SockAddr& sockAddr, int reuseAddr, int protocolFamily, int protocol ) { TRACE_CALL; if (stream.handleInvalid ()) { // open on a new socket descriptor if (stream.open (SOCK_STREAM, protocolFamily, protocol, reuseAddr) < 0) return -1; // cannot open } sockaddr* remoteAddr = 0; if (sockAddr.clone (remoteAddr) != -1) { size_t size = sockAddr.size (); REACTOR_HANDLE handle = stream.handleGet (); if (::connect (handle, remoteAddr, size) < 0) stream.close (); #if 0 if (::bind (handle, remoteAddr, size) < 0) stream.close (); else if (::connect (handle, remoteAddr, size) < 0) stream.close (); #endif } delete remoteAddr; return stream.handleInvalid () ? -1 : 0; }