int SockConnector::connect(SockStream &stream, BaseAddr &addr) { //struct sockaddr_in _addr; //memcpy(&_addr, addr.get_addr(), addr.get_addr_size()); //LOG_PRN((LM_INFO, "SockConnector:: connect %s:%d\n", inet_ntoa(_addr.sin_addr), addr.port())); if(stream.get_handle() == INVALID_SOCKET) { stream.open(AF_INET); if(stream.get_handle() == INVALID_SOCKET) { perror("socket"); #ifdef WIN32 return GetLastError(); #else return errno; #endif } } int res = ::connect(stream.get_handle() , reinterpret_cast<struct sockaddr *> (addr.get_addr()), (socklen_t)addr.get_size()); if (res ==SOCKET_ERROR ) { LOG_PRN((LM_WARNING, "SockConnector::connect() failed\n")); return -1; } return 0; }
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; }