我正在编写一个 C 函数来检查来自客户端的套接字连接是否可用。我使用带有 MSG_PEEK 的“recv”函数来不改变输入缓冲区。
但是,当客户端关闭套接字连接时,'recv' 应该返回 -1,但事实并非如此。客户端关闭后,下面函数中的“recv”一直返回 0。
char is_avail(int connection) {
char buffer;
int result = recv(connection,&buffer,1,MSG_PEEK);
if (result<0)
return 0;
else
return 1;
}
这件事有什么理由吗?我还想将 MSG_PEEK 与 MSG_WAITALL 结合起来。我试过:
recv(connection,&buffer,1,MSG_PEEK|MSG_WAITALL);
但它没有生效。