Такая проблема нужно корректно обработать send + recv таймаут Code: объявлн. сткрутр, сокетов коннектимся, все удачно // теперь нужно чекнуть 2 вида проксей http и sock5 с таймаутами на ресив и сенд check_HTTP_proxy (my_sock, 5,5); здесь должна быть функция проверки socks5 с этим же сокетом, но будет ли она исполнятся зависит от ответа предыдущ. функции Code: nt check_HTTP_proxy (SOCKET sock, int recv_timeout, int send_timeout) // sec.... { DWORD recv_timeout = 5*1000; // sec DWORD send_timeout = 5*1000; // sec setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&recv_timeout, sizeof(DWORD)); setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&send_timeout, sizeof(DWORD)); char recv_buffer[1024]; char req_buff[]= "POST http://domain.com/upload.php HTTP/1.0 \r\n" "Host: domian.com\r\n" "User-Agent: Mozilla/5.0\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Connection: Close\r\n" "post_data=someverylongrequeststring\r\n"; int send_res = send(sock, req_buff, strlen(req_buff), 0); if((send_res == SOCKET_ERROR) && (WSAGetLastError()==WSAETIMEDOUT)) { closesocket(sock); // для себя return **; // таймаут send } else { int recv_res = recv (sock,recv_buffer, 1024, 0); if((recv_res==SOCET_ERROR) && (WSAGetLastError()==WSAETIMEDOUT)) { return **; // таймаут ресив, как бы должен закрыть сокет, но можно и не закрывать в функции } else { // все нормально } } } Не сильно ли я жестко обрабатываю таймауты и стоит вообще ставить таймаут на send ? p/s только реализация функции http чека.
Между делом, таймауты даже выставлены неправильно. В обоих вызовах setsockopt следует передавать не структуру timeval, а просто DWORD и, соответственно, sizeof(DWORD).