bool Sockethelper::connect(u_long ip, int port) { ipaddr_type sa; memset(&sa, 0, sizeof(sa)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = ip; sa.sin_port = htons((u_short)port); if (SOCKET_ERROR == ::connect(getsocket(), (struct sockaddr*)&sa, sizeof(sa))) { int en = socket_error::getLastError(); log(Info, "error socket port:%d, error no is:%d", port, en); if (isIgnoreConnect(en)) return false; throw socket_error(en, "connect"); } // XXX check dereism [freebsd] { u_long localip; int localport; localip = getlocal(&localport); if (localip == ip && localport == port) throw socket_error(0, "dereism connection found"); } m_sock_flags.connected = 1; return true; }
int doit(int sockfd, uint16_t num_trackers, in_addr_t *trackers, uint16_t maxpeers, uint16_t num_pkg_servers, in_addr_t *pkg_servers, CURL *curlhandle) { struct timeval start_time; #ifdef TIMEIT #endif struct timeval end_time; unsigned long long s, e; char *forminfo; char *range; char filename[PATH_MAX]; gettimeofday(&start_time, NULL); bzero(filename, sizeof(filename)); if ((forminfo = getenv("QUERY_STRING")) == NULL) { senderror(500, "No QUERY_STRING", errno); return(0); } if ((range = getenv("HTTP_RANGE")) != NULL) { char *ptr; if ((ptr = strchr(range, '=')) != NULL) { range = ptr + 1; } } if (getargs(forminfo, filename) != 0) { senderror(500, "getargs():failed", errno); return(0); } /* * the time is 'epoch' time */ logmsg("%d : doit:file %s\n", start_time.tv_sec, basename(filename)); #ifdef DEBUG logmsg("doit:getting file (%s)\n", filename); #endif /* * if the file is local, just read it off the disk, otherwise, ask * the tracker where the file is */ if (getlocal(filename, range) != 0) { if (trackfile(sockfd, filename, range, num_trackers, trackers, maxpeers, num_pkg_servers, pkg_servers, curlhandle) != 0) { senderror(404, "File not found", 0); } } #ifdef DEBUG logmsg("doit:done:file (%s)\n\n", filename); #endif #ifdef TIMEIT #endif gettimeofday(&end_time, NULL); s = (start_time.tv_sec * 1000000) + start_time.tv_usec; e = (end_time.tv_sec * 1000000) + end_time.tv_usec; logmsg("doit:svc time: %lld usec file %s from %s\n\n", (e - s) - curltime, basename(filename), fromip); return(0); }