int request_get(string fileHash, string pieceHash, char* recv_buffer) { ClientInfo client; string URI = "/cache/get.jsp?fileHash=" + fileHash + "&pieceHash=" + pieceHash; HttpHeader header(GET, URI); header.Add(header.p.Accept, "*/*"); header.Add(header.p.AcceptLanguage, "en-us"); header.Add(header.p.UserAgent, client.UserAgent); header.Add(header.p.Host, "p-cache.veoh.com"); header.Add(header.p.Cookie, ("VEOH_GUIDE_AUTH=" + client.authCookie + " ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=" + client.securityCookie)); string http_buffer = header.Create(); cout << http_buffer; int s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); /* ** Non-blocking is a bad idea, eats CPU if(fcntl(s, F_SETFL, O_NONBLOCK) == -1) { cout << "Error occurred in fcntl!" << endl; #ifdef _WIN32 closesocket(s); #else close(s); #endif //_WIN32 exit(0); } if(fcntl(s, F_SETFL, O_ASYNC) == -1) { cout << "Error occurred in fcntl!" << endl; #ifdef _WIN32 closesocket(s); #else close(s); #endif //_WIN32 exit(0); } */ veoh = gethostbyname("p-cache.veoh.com"); sockaddr_in veohweb; veohweb.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)veoh->h_addr))); veohweb.sin_port = htons(80); veohweb.sin_family = AF_INET; memset(veohweb.sin_zero, '\0', sizeof veohweb.sin_zero); if (connect(s, (sockaddr*)&veohweb, sizeof(veohweb))==-1) cout << "Error connecting to Veoh" << endl; int bsent = send(s, http_buffer.c_str(), http_buffer.size(), 0); if (bsent==-1) cout << "Error sending request to Veoh" << endl; else cout << "Request sent to Veoh" << endl; int brecv = 0; int data = brecv; fd_set readfds; struct timeval tv; FD_ZERO(&readfds); FD_SET(s, &readfds); //recv_buffer[header_length+content_length+1] = '\0'; int status = 0; do { tv.tv_sec = 2; tv.tv_usec = 500000; status = select(s+1, &readfds, NULL, NULL, &tv); if (status == -1) { cout << "Error in select!" << endl; break; } else if(status == 0) { break; } else { brecv = recv(s, recv_buffer, 1000, 0); if(brecv != -1) { data += brecv; for(int a = 0; a < brecv; ++a) cout << recv_buffer[a]; } else { cout << "Error receiving from Veoh" << endl; } } } while(brecv != 0); cout << endl; #ifdef _WIN32 closesocket(s); #else close(s); #endif //_WIN32 return brecv; }