此代码在Linux上运行:
int r, c;
...
assert(0 == (O_NONBLOCK & fcntl(sockfd, F_GETFL, 0)));
errno = 0;
r = read(sockfd, &c, 1);
if (r == 0 && errno == 0) {
printf("What gives?\n");
}
...
从套接字执行读取的有时会返回零(在r
中)并且将errno
设置为零(0)。 我遇到什么情况? 除非出现错误,否则我真的想要读取阻止。
答案 0 :(得分:9)
这意味着客户端已完成发送数据(例如:写了shutdown
),并且您已经读取了所有可用数据。
返回值
成功时,返回读取的字节数 (零表示文件结束), 并且文件位置按此编号前进。
答案 1 :(得分:3)
通常read
手册页说:
成功时,返回读取的字节数(零表示结束 的文件)
所以0
表示您的套接字已关闭。