无效的句柄异常

时间:2015-08-04 12:58:40

标签: c++ visual-studio

我有单元测试,测试我的功能是否允许使用关闭套接字。所以它看起来像这样:

closesocket(sock);
int result;
result = getsockopt(sock,SOL_SOCKET,SO_TYPE, type, len);
if(result == SOCKET_ERROR)
    //write error etc.

在Windows平台上调用getsockopt不会引发异常" 0xC0000008:指定了无效句柄。"。在Windows Phone ARM平台上,它引发了异常,虽然我可以关闭First-chance异常,但我无法真正关闭未捕获的异常。

尝试

try{
getsockopt();
}
catch(...)
{}

不起作用。有没有办法让这个例外变得沉默?

修改

我想指出我是第一次调用closesocket(sock)和后来的getsockopt(),因为我想测试我调用getsockopt()的函数是否会拒绝这种情况。虽然在Windows上我可以顺利运行我的测试,因为getockopt不会在Windows Phone ARM上抛出异常,这让我坐下来等待这个调用只是为了点击继续。

1 个答案:

答案 0 :(得分:2)

尽管名称不同,但这些不是C ++异常,而是SEH exceptions。它们是Windows等效的Unix信号。

接收这样的例外类似于段错(SIGSEGV):它几乎总是更聪明,不试图从中恢复,而是为了防止它首先发生。请参阅getsockopt的文档以了解具体方法。

在"几乎总是"未涵盖的情况下,如果可能的话,您可以使用特定于编译器的__try/__except结构来捕获和处理SEH异常。