У меня значительная проблема с использованием стандартного сокета в стиле BSD в программе на C ++. В приведенном ниже коде я подключаюсь к локальному веб-серверу, отправляю запрос и просто создаю цикл, ожидающий возвращения данных. Я на самом деле делаю получение данных, но затем я получаю бесконечный поток данных 0-длины, как если бы это был неблокирующий сокет. Предположительно, веб-сервер не прерывал соединение, потому что в этом случае я бы получил длину -1.
Пожалуйста, игнорируйте простые опечатки, которые я делаю ниже, так как я пишу код из памяти, а не прямое копирование / вставку. Код дает одинаковый результат в OSX и Windows.
int sock = socket(AF_INET, SOCK_STREAM, 0);
//assume serv_addr has been created correctly
connect(sock, (sockaddr*)&serv_addr, sizeof(serv_addr)) < 0);
std::string header = "GET / HTTP/1.1\r\n"
"Host: 127.0.0.1:80\r\n"
"Keep-Alive: 300\r\n"
"Connection: keep-alive\r\n\r\n";
send(sock, header.c_str(), header.length()+1, 0);
for (;;) {
char buffer[1024];
int len = recv(sock, buffer, 1024, 0);
cout << len << endl;
//this outputs two numbers around 200 and 500,
//which are the header and html, and then it
//outputs and endless stream of 0's
}