带有MSG_PEEK的C'recv'不返回-1

时间:2012-08-21 07:38:58

标签: c++ c sockets recv peek

我正在编写一个C函数来检查来自客户端的套接字连接是否可用。我使用'recv'函数和MSG_PEEK不改变输入缓冲区。

但是,当客户端关闭套接字连接时,'recv'应该返回-1,但它不会返回-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);

但它没有生效。

1 个答案:

答案 0 :(得分:4)

当套接字正确关闭时,

recv不返回-1,而是“0”。

0 - &gt;优雅地关闭套接字

-1-&GT;发生了实际错误

&GT; 0→数据已被阅读。