这是我到目前为止所拥有的
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在哪里?我需要了解异常
答案 0 :(得分:4)
errno
是一个全局整数变量,在accept
等系统调用失败后包含错误代码。您可能必须为要定义的变量包含头文件<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
的值未定义。