1

これが私がこれまでに持っているものです

socklen_t cli_size;
struct sockaddr cli;
int in_sock;

/* event from TCP server socket, new connection */
cli_size = sizeof(cli);
try {
    if ((in_sock  = ::accept(handle,&cli, &cli_size)) < 0) {
        throw in_sock;
        return NULL;
        }
    }
catch(int ex) {
    cout << "Exception Nr. " << ex << endl;
    }

マンページから:

エラーの場合は -1 が返され、errno が適切に設定されます。

質問: errno がどこにあるのかまだわかりませんか? 例外を理解する必要がある

4

1 に答える 1

4

errnoacceptなどのシステム コールが失敗した後のエラー コードを含むグローバル整数変数です。<errno.h>変数を定義するには、ヘッダー ファイルを含める必要がある場合があります。

あなたの場合、返されacceptた値をスローするのではなく、の値をスローする必要がありerrnoます。

try
{
    if ((in_sock = accept(...)) == -1)
        throw errno;
    // ...
}
catch (int error)
{
    std::cout << "Error code " << error << " (" << std::strerror(error) << ")\n";
}

関数std::strerrorはヘッダー ファイルで宣言され<cstring>、エラーを説明する文字列を返します。

重要な注意: の値は、関数が失敗したことを返す場合errnoにのみ有効です。あなたの例で成功した場合、の値は未定義です。accepterrno

于 2012-09-03T09:25:13.033 に答える