从c中读取套接字中的所有字节

时间:2014-11-15 11:54:34

标签: c linux sockets

你好我需要从socket读取所有数据,有这样的功能

void handle_socket(int sockfd) {
    int len;
    int n;
    char buf[1024];
    n = recv(sockfd, buf, sizeof(buf) - 1, 0);
    while (n > 0) {
        buf[n] = '\0';
        printf("%s", buf);
        n = recv(sockfd, buf, sizeof(buf) - 1, 0);
    }
    printf("Exiting\n");
}

但我在终端看不到Exiting,我做错了什么? 套接字sockfd = socket(AF_INET, SOCK_STREAM, 0);
PS 我需要从POP3服务器读取响应我试图找到\r\n.\r\n但我无法确定此字符串是否在一个缓冲区(例如{ {1}}在第一个缓冲区\r\n在第二个

1 个答案:

答案 0 :(得分:2)

recv()函数在另一端关闭连接上不返回0(EOF)直到进程,并且没有剩余数据要读取。所以你会看到"退出"当其他进程关闭连接时。

您的函数会覆盖旧数据。您应该决定是否限制缓冲区的大小或动态扩展内存以获取新数据。我不知道你的限制是什么,但我建议通过调用fdopen()来创建FILE实例,并使用标准函数,如fgetc,fgets或getLine。