[英]C fgetc() on socket/file stream while checking for EOF goes into infinite loop
int main(int argc, char *argv[]) {
int conn_s = socket(AF_INET, SOCK_STREAM, 0);
struct addrinfo hints;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = 0;
struct addrinfo *addr = (struct addrinfo *) calloc(1, sizeof(struct addrinfo));
getaddrinfo("google.com", "80", &hints, &addr);
connect(conn_s, addr->ai_addr, sizeof(struct sockaddr_in));
char *http_request = "GET / HTTP/1.1\n\n";
send(conn_s, http_request, strlen(http_request), 0);
FILE *sockfile = (FILE *) fdopen(conn_s, "r");
FILE *fp = fopen("/Users/leekaiwei/Desktop/results.html", "w+");
int ch;
while ((ch = fgetc(sockfile)) != EOF) {
fprintf(fp, "%c", ch);
}
close(conn_s);
fclose(fp);
fclose(sockfile);
free(addr);
return 0;
}
while循環永遠不會結束。 為什么是這樣? 我用本地文件完成了它,它工作正常。 它也適用於for循環,只是fgetc()永遠不會返回EOF。
HTTP/1.1
默認為connection: keepalive
,所以像simonc所說,服務器實際上正在等待你發出下一個請求,並將等到服務器相關的超時。 使用HTTP/1.0
獲取EOF
。
FWIW:完成需要245秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.