int Ctcs::Connect() { ssize_t r; m_last_timestamp = now; if( _s2sin(m_host, m_port, &m_sin) < 0 ){ CONSOLE.Warning(2, "warn, get CTCS ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if( INVALID_SOCKET == m_sock ) return -1; if( setfd_nonblock(m_sock) < 0 ){ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } r = connect_nonb(m_sock, (struct sockaddr *)&m_sin); if( r == -1 ){ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; }else if( r == -2 ){ m_status = DT_TRACKER_CONNECTING; }else{ m_status = DT_TRACKER_READY; if(*cfg_verbose) CONSOLE.Debug("Connected to CTCS"); if( Send_Protocol() != 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send protocol to CTCS failed: %s", strerror(errno)); return -1; } if( Send_Auth() != 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send password to CTCS failed: %s", strerror(errno)); return -1; } if( Send_Torrent(BTCONTENT.GetPeerId(), BTCONTENT.GetMetainfoFile()) < 0 && errno != EINPROGRESS ){ CONSOLE.Warning(2, "warn, send torrent to CTCS failed: %s", strerror(errno)); return -1; } } return 0; }
int btTracker::Connect() { ssize_t r; time(&m_last_timestamp); if (_s2sin(m_host, m_port, &m_sin) < 0) { CONSOLE.Warning(2, "warn, get tracker's ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if (INVALID_SOCKET == m_sock) return -1; // we only need to bind if we have specified an ip // we need it to bind here before the connect!!!! if (cfg_listen_ip != 0) { struct sockaddr_in addr; // clear the struct as requested in the manpages memset(&addr, 0, sizeof(sockaddr_in)); // set the type addr.sin_family = AF_INET; // we want the system to choose port addr.sin_port = 0; // set the defined ip from the commandline addr.sin_addr.s_addr = cfg_listen_ip; // bind it or return... if (bind (m_sock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0) { CONSOLE.Warning(1, "warn, can't set up tracker connection: %s", strerror(errno)); return -1; } } if (setfd_nonblock(m_sock) < 0) { CLOSE_SOCKET(m_sock); return -1; } r = connect_nonb(m_sock, (struct sockaddr *) &m_sin); if (r == -1) { CLOSE_SOCKET(m_sock); return -1; } else if (r == -2) m_status = T_CONNECTING; else { if (arg_verbose) CONSOLE.Debug("Connected to tracker"); if (0 == SendRequest()) m_status = T_READY; else { CLOSE_SOCKET(m_sock); return -1; } } return 0; }
int btTracker::Connect() { struct sockaddr_in sin; ssize_t r; m_result = DT_NORMAL; m_last_timestamp = now; if( _s2sin(m_spec->host, m_spec->port, &sin) < 0 ){ CONSOLE.Warning(2, "warn, get tracker's ip address failed."); return -1; } m_sock = socket(AF_INET, SOCK_STREAM, 0); if( INVALID_SOCKET == m_sock ){ CONSOLE.Warning(2, "warn, tracker socket allocation failed: %s", strerror(errno)); return -1; } /* we only need to bind if we have specified an ip we need it to bind here before the connect! */ if( *cfg_listen_ip != 0 ){ struct sockaddr_in addr; // clear the struct as requested in the manpages memset(&addr, 0, sizeof(sockaddr_in)); // set the type addr.sin_family = AF_INET; // we want the system to choose port addr.sin_port = 0; // set the defined ip from the commandline addr.sin_addr.s_addr = *cfg_listen_ip; // bind it or return... if( bind(m_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)) != 0 ){ CONSOLE.Warning(1, "warn, can't set up tracker connection: %s", strerror(errno)); return -1; } } if( setfd_nonblock(m_sock) < 0 ){ CONSOLE.Warning(2, "warn, tracker socket setup failed: %s", strerror(errno)); CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } r = connect_nonb(m_sock, (struct sockaddr *)&sin); if( r == -1 ){ CONSOLE.Warning(2, "warn, connect to tracker at %s failed: %s", m_spec->url, strerror(errno)); CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; }else if( r == -2 ){ if(*cfg_verbose) CONSOLE.Debug("Connecting to tracker at %s", m_spec->url); m_status = DT_TRACKER_CONNECTING; }else{ if(*cfg_verbose) CONSOLE.Debug("Connected to tracker at %s", m_spec->url); if( 0 == SendRequest() ) m_status = DT_TRACKER_READY; else{ CLOSE_SOCKET(m_sock); m_sock = INVALID_SOCKET; return -1; } } return 0; }