你好我需要从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
在第二个
答案 0 :(得分:2)
recv()函数在另一端关闭连接上不返回0(EOF)直到进程,并且没有剩余数据要读取。所以你会看到"退出"当其他进程关闭连接时。
您的函数会覆盖旧数据。您应该决定是否限制缓冲区的大小或动态扩展内存以获取新数据。我不知道你的限制是什么,但我建议通过调用fdopen()来创建FILE实例,并使用标准函数,如fgetc,fgets或getLine。