我对ERROR_PROTECTION_VIOLATION感到困惑

时间:2012-11-01 08:45:03

标签: linux tcp

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

2 个答案:

答案 0 :(得分:1)

您在Linux下运行,因此在Windows error.h中所说的内容完全无关紧要。在Linux中,errno.h, 115是:

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

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

你没有这种信念的基础。

答案 1 :(得分:0)

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

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

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

我建议您阅读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

中的

使用syscallrecv(2)时,请阅读其手册页以了解何时可能发生特定错误。

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