【发布时间】:2016-01-18 12:18:33
【问题描述】:
如何获取套接字通信中recv() 返回的错误号或错误字符串,recv() 返回-1 作为读取大小,这意味着发生了一些错误。我想知道错误的具体原因。那我怎样才能得到它。
【问题讨论】:
-
首先阅读
recv手册页,尤其是关于the return value的部分。
标签: c linux return-value errno strerror
如何获取套接字通信中recv() 返回的错误号或错误字符串,recv() 返回-1 作为读取大小,这意味着发生了一些错误。我想知道错误的具体原因。那我怎样才能得到它。
【问题讨论】:
recv手册页,尤其是关于the return value的部分。
标签: c linux return-value errno strerror
您需要包含 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)
; 打扰了某人? ;)
您可以使用errno.h 头文件中的errno 变量。
来自man page(强调我的)
返回值
成功完成后,
recv()将返回消息的长度(以字节为单位)。如果没有消息可以接收并且对端已经执行了有序的关闭,recv()应该返回0。否则返回-1并设置errno表示错误。 p>
或者,您也可以调用perror() / strerror() 来获取与错误相关的人类可读字符串。
【讨论】: