我正在编写一个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;
}

这件事有什么原因吗?我还想把味精偷窥和味精等等结合起来。我试过:
recv(connection,&buffer,1,MSG_PEEK|MSG_WAITALL);

但没有效果。

最佳答案

当套接字正确关闭时,recv不返回-1,而是返回“0”。
0->套接字正常关闭
-1->发生实际错误
>0->已读取数据。

关于c++ - MSG_PEEK的C'recv'不返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12050267/

10-13 08:11