我使用 TCP 函数“recv”来接收数据。然后使用 GetLastError() 显示错误 ID。它是 115。在 windows error.h 中它是 #define ERROR_PROTECTION_VIOLATION 115 /* 错误的用户虚拟地址 */。你能给我什么建议吗?PS:这个程序是在linux下运行的。但是我认为linux && windows中的错误代码必须和TCP错误一样。
2 回答
你在 Linux 下运行,所以它在 Windows 中所说的error.h
完全和完全无关。在 Linux 中的errno.h,
115 是:
#define EINPROGRESS 115 /* Operation now in progress */
我认为 linux && windows 中的错误代码必须与 TCP 错误相同。
你没有这种信念的基础。
错误代码当然是特定于操作系统的(因此您认为它在 Windows 和 Linux 上应该相同的想法是错误的)。在 Linux 上,您应该阅读errno(3)手册页(您可以man 3 errno
在安装manpages
和manpages-dev
打包后使用命令获取)。
TCP没有定义错误代码,AFAIK。它定义了一个协议。
一种可移植的使用方式errno
是使用符号名称,例如并使用或EPERM
向用户报告错误 。请参阅strerror(3)和perror(3)。实际的错误编号是系统特定的(即在 Linux/x86 和 FreeBSD/ia64 上可能不一样)。Posix 标准指定了符号errno.h名称。strerror(errno)
perror
我建议你阅读像Advanced Linux Programming和Advanced 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 功能。它特定于您的程序,或链接到它的某个库。