Функция HTTP Request C ++ не всегда отправляет запрос (редко)

У меня есть функция HTTP post_data в C ++, используемая для отправки HTTP-запроса на мой веб-сервер.

Примерно 1 из каждых 50 попыток, запрос фактически проходит, в остальное время он не отправляется.

Я понятия не имею, почему, но это должно пройти 100% времени. Вот моя функция post_data:

Одна из причин, по которой я не использую библиотеку HTTP, заключается в том, что я просто не мог заставить их работать несколько месяцев назад.

std::string MasterServerHandler::post_data(std::string file, std::string data){
string request;
string response;
int resp_leng;

char buffer[BUFFERSIZE];
struct sockaddr_in serveraddr;
int sock;

WSADATA wsaData;
const char* ipaddress  = cst::masterIP.c_str();
std::string host = cst::masterHost;

int port = 80;

request+="GET /folder/" + string(file) + data + " HTTP/1.0\r\n";
request+="Host: " + host + "\r\n";
request+="\r\n";
//open socket


if ((sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
cout << "WEB socket() failed" << endl;

//connect
memset(&serveraddr, 0, sizeof(serveraddr));
serveraddr.sin_family      = AF_INET;
serveraddr.sin_addr.s_addr = inet_addr(ipaddress);
serveraddr.sin_port        = htons((unsigned short) port);
if (connect(sock, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
cout << "WEB connect() failed" << endl;

//send request
if (send(sock, request.c_str(), request.length(), 0) != request.length())
cout << "WEB send() sent a different number of bytes than expected" << endl;;

//If we care about the response
//get response
response = "";
resp_leng= BUFFERSIZE;
while (resp_leng == BUFFERSIZE)
{
resp_leng= recv(sock, (char*)&buffer, BUFFERSIZE, 0);
if (resp_leng>0)
response+= string(buffer).substr(0,resp_leng);
//note: download lag is not handled in this code
}

//disconnect
closesocket(sock);

return response;

}

Так кто-нибудь знает, почему иногда этот HTTP-вызов не проходит весь путь?
Я забрал closesocket (), и он работает, но если я уберу это, произойдут утечки пакетов, и это плохо, потому что эта функция вызывается очень часто.

Я также попытался заменить оператор while следующим:

while (resp_leng > 0)

И это просто петли навсегда. Это может быть потому, что соединение не было закрыто на стороне PHP, но у меня нет петель
вообще работает на моем сценарии PHP, так что не может быть.

Действительно запутался, почему это не работает.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector