【问题标题】:Getting error number returned by recv function获取recv函数返回的错误号
【发布时间】:2016-01-18 12:18:33
【问题描述】:

如何获取套接字通信中recv() 返回的错误号或错误字符串,recv() 返回-1 作为读取大小,这意味着发生了一些错误。我想知道错误的具体原因。那我怎样才能得到它。

【问题讨论】:

标签: c linux return-value errno strerror


【解决方案1】:

您需要包含 errno.h 并使用errno 全局变量来检查最后一个错误代码。此外,您可以使用strerror() 打印一个区域设置感知字符串来解释错误。

例子

#include <errno.h>

ssize_t size;

if ((size = recv( ... )) == -1)
{
    fprintf(stderr, "recv: %s (%d)\n", strerror(errno), errno);
}

【讨论】:

  • 常用格式为:fprintf(stderr, "recv: %s (%d)\n", strerror(errno), errno)
  • @Ctx 我知道,但这很直截了当,所以真的很想知道为什么投反对票,不是吗?
  • 也许 fprintf 末尾缺少的; 打扰了某人? ;)
  • 您可以为多余的分号投反对票吗?这些天来,根本不值得冒险回答任何问题:(
【解决方案2】:

您可以使用errno.h 头文件中的errno 变量。

来自man page强调我的

返回值

成功完成后,recv() 将返回消息的长度(以字节为单位)。如果没有消息可以接收并且对端已经执行了有序的关闭,recv()应该返回0。否则返回-1并设置errno表示错误。 p>

或者,您也可以调用perror() / strerror() 来获取与错误相关的人类可读字符串。

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2014-05-04
    • 2020-10-01
    • 2014-07-15
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多