我想使用套接字在C中创建一个简单的请求/响应应用程序。我已经达到了以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netdb.h>
int main ( int argc, char* argv[] ) {
struct addrinfo hints;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
hints.ai_flags = AI_PASSIVE;
int currentChar = 0;
struct addrinfo *addr;
int conn_s = socket ( AF_INET, SOCK_STREAM, 0 );
getaddrinfo( "google.com", "80", &hints, &addr );
connect( conn_s, addr->ai_addr, sizeof( struct sockaddr_in ) );
FILE* stream = fdopen( conn_s, "w+" );
if ( stream != NULL ) {
char *http_request = "GET / HTTP/1.1\r\n\r\n";
fprintf( stream, "%s", http_request );
do {
currentChar = fgetc( stream );
printf( "%c", currentChar );
} while ( currentChar != EOF );
fclose ( stream );
freeaddrinfo( addr );
}
return 0;
}
基本上,控制台显示流的结果(因此HTTP请求的响应),但似乎进程永远不会终止。从未达到该计划的结束。
我猜 currentChar 从不持有值 EOF ,但我不知道为什么。
答案 0 :(得分:0)
这是因为HTTP / 1.1具有持久连接(也称为keepalive),您可以通过使用HTTP / 1.0并添加Connection: close
标题