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函数返回失败时才有效。如果在您的示例中accept成功,则值为errno未定义。

于 2012-09-03T09:25:13.033 回答