当没有更多数据可读取时,如何告诉停止recv()处于空闲状态?

时间:2019-09-04 00:11:37

标签: c sockets http tcp

基本上,我正在向某个URL发送GET请求,并使用recv()接收结果。我有一个while循环,可以从recv()的缓冲区中获取文件的一部分。

void send_GET(int client, char *url) {
    char buf[BUF_SIZE] = {0};
    sprintf(buf, "GET / HTTP/1.1\r\nHost: %s\r\n\r\n", url);
    send(client, buf, strlen(buf), 0);
}

int main() {
    //sock is a socket()
    send_GET(sock, url);

    while ((numbytes = recv(sock, buf, BUF_SIZE - 1, 0)) > 0) {
        buf[BUF_SIZE] = '\0';
        printf("%s", buf);
    }

    printf("\n");
    close(sock);
    return 0;
}

一旦我从请求的页面中获取了整个HTML,recv()进程就会变得空闲。我知道close(sock)将结束它,但是我不知道如何弄清楚该文件何时结束。我不知道如何退出while循环,因为numbytes永远不等于0或小于0。一旦获得最后一个块,它就坐下来并处于空闲状态。

如何知道何时收到我请求的文件结尾?

0 个答案:

没有答案