0

我使用 TCP 函数“recv”来接收数据。然后使用 GetLastError() 显示错误 ID。它是 115。在 windows error.h 中它是 #define ERROR_PROTECTION_VIOLATION 115 /* 错误的用户虚拟地址 */。你能给我什么建议吗?PS:这个程序是在linux下运行的。但是我认为linux && windows中的错误代码必须和TCP错误一样。

4

2 回答 2

1

你在 Linux 下运行,所以它在 Windows 中所说的error.h完全和完全无关。在 Linux 中的errno.h,115 是:

#define EINPROGRESS 115 /* Operation now in progress */

我认为 linux && windows 中的错误代码必须与 TCP 错误相同。

你没有这种信念的基础。

于 2012-11-01T09:16:08.750 回答
0

错误代码当然是特定于操作系统的(因此您认为它在 Windows 和 Linux 上应该相同的想法是错误的)。在 Linux 上,您应该阅读errno(3)手册页(您可以man 3 errno在安装manpagesmanpages-dev打包后使用命令获取)。

TCP没有定义错误代码,AFAIK。它定义了一个协议。

一种可移植的使用方式errno是使用符号名称,例如并使用或EPERM向用户报告错误 。请参阅strerror(3)perror(3)。实际的错误编号是系统特定的(即在 Linux/x86 和 FreeBSD/ia64 上可能不一样)。Posix 标准指定了符号errno.h名称。strerror(errno)perror

我建议你阅读像Advanced Linux ProgrammingAdvanced Unix Programming这样的好书。

如果你想为 Linux、Windows、MacOSX 制作可移植的代码,你可以使用 Qt 之类的框架

在我的 Debian/Linux/AMD64 系统上,我有

#define EINPROGRESS 115 /* Operation now in progress */

在标题中/usr/include/asm-generic/errno.h

使用诸如recv(2)之类的系统调用时,请阅读其手册页以了解其中何时会发生特定错误。

注意:GetLastError不是标准的 Linux 功能。它特定于您的程序,或链接到它的某个库。

于 2012-11-01T08:50:49.147 回答