长度为零的recv()有效吗?

Era*_*ran 10 c sockets

使用C中的recv()函数从'stream'套接字读取,len参数可以为零吗?

recv()函数为'远程连接关闭'返回零,并且在正常操作时实际读取的字节数,因此如果它应该读取零字节则听起来有问题.

PS
是的我知道单独处理它,并没有达到这种情况,仍然我想知道该功能是否可以处理它,我找不到任何关于它的文档.

cni*_*tar 3

我相信答案是“视情况而定”。如果标准没有指定(事实上我相信它没有),任何实现都可以随心所欲。

  • 它可能会失败EINVAL
  • 它可以挂
  • 它可以返回0并继续
  • 它可以打印一条有趣的消息并启动游戏流氓(我知道gcc过去常常这样做:)))

实际上在我的实现中,它返回 0 并继续。要检查它是否失败或只是返回 0,您可以errno在调用后检查,因此它并不像您想象的那么有问题。