TCP関数「recv」を使用してデータを受信します。次に、GetLastError() を使用してエラー ID を表示します。115 です。Windows の error.h では #define ERROR_PROTECTION_VIOLATION 115 /* Bad user virtual address */ です。何かアドバイスをいただけますか?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)などのsyscallを使用する場合は、man ページを読んで、特定のエラーがいつ発生するかを理解してください。
注:GetLastError
標準の Linux 関数ではありません。それはあなたのプログラム、またはそれにリンクされたいくつかのライブラリに固有です。