2

すべてのタイプのbsdスタイルのソケットエラーのリストはどこにありますか?

4

4 に答える 4

6

ドキュメントでは?たとえば、connect()については、以下を参照してください。

% man connect
...
  ECONNREFUSED
          No-one listening on the remote address.
  EISCONN
          The socket is already connected.

  ENETUNREACH
          Network is unreachable.
于 2008-10-05T16:53:48.467 に答える
2

エラーコードのリスト(およびその意味の一般的な説明)は、各機能(たとえば、connectなど)のOpenGroupのページにもあります。

于 2008-10-05T16:25:41.830 に答える
1

考えられるすべてのerrnoまたはそれらに関するいくつかのコメントを知りたい場合は、ヘッダーファイルを確認できます。Linuxシステムでは、次の場所にあります。

  • /usr/include/asm-generic/errno-base.h
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM 1/*操作は許可されていません*/
#define ENOENT 2/*そのようなファイルやディレクトリはありません*/
#define ESRCH 3/*そのようなプロセスはありません*/
#define EINTR 4/*中断されたシステムコール*/
#define EIO 5 / * I/Oエラー*/
#define ENXIO 6/*そのようなデバイスやアドレスはありません*/
#define E2BIG 7/*引数リストが長すぎます*/
#define ENOEXEC 8 /*Execフォーマットエラー*/
#define EBADF 9/*不正なファイル番号*/
#define ECHILD 10/*子プロセスなし*/
#define EAGAIN 11/*再試行*/
..。
  • /usr/include/asm-generic/errno.h
#ifndef _ASM_GENERIC_ERRNO_H
#define _ASM_GENERIC_ERRNO_H

#含む

#define EDEADLK 35/*リソースのデッドロックが発生します*/
#define ENAMETOOLONG 36/*ファイル名が長すぎます*/
#define ENOLCK 37/*使用可能なレコードロックはありません*/
#define ENOSYS 38/*関数は実装されていません*/
#define ENOTEMPTY 39/*ディレクトリが空ではありません*/
#define ELOOP 40/*検出されたシンボリックリンクが多すぎます*/
#define EWOULDBLOCK EAGAIN/*操作がブロックされます*/
..。

開発マンページをインストールしてmansocketまたはmanconnectを試してみるときに、socket()やconnect()などの呼び出しがどのerrnoを返すかを知りたい場合は、

于 2008-10-05T17:06:19.970 に答える
1

多くの関数はerrno失敗時に設定されます。自分で調べてエラー番号を文字列に変換する代わりに、 をerrno.h呼び出す方がはるかに優れていますperror

perror現在errnoの に対応するメッセージをstderrオプションのプレフィックス付きで出力します。

使用例:

if (connect())
{
    perror("connect() failed in function foo");
    ...
}

perror以外の場所で使用するために文字列をキャプチャしたい場合は、友人が呼び出されstrerrorstrerror_r役立つ可能性がありますstderr

于 2008-10-06T08:02:25.933 に答える