0

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

注:GetLastError標準の Linux 関数ではありません。それはあなたのプログラム、またはそれにリンクされたいくつかのライブラリに固有です。

于 2012-11-01T08:50:49.147 に答える