簡體   English   中英

無效的句柄異常

[英]Invalid handle exception

我有單元測試,測試我的功能是否不允許使用封閉式套接字。 所以看起來像這樣:

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上,我可以平穩地運行測試,因為getsockopt不會拋出異常,而在Windows Phone ARM上,它可以拋出異常,這使我坐下來等待此調用,只是單擊“繼續”。

盡管有它們的名字,但它們不是C ++異常,而是SEH異常 它們在Windows中相當於Unix信號。

接收到這樣的異常類似於segfault(SIGSEGV):最好總是不嘗試從中恢復,而是從一開始就防止它發生。 請參閱getsockopt的文檔以了解操作方法。

在“幾乎總是”未涵蓋的情況下,如果可能的話,可以訴諸於編譯器特定的__try / __except結構來捕獲和處理SEH異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM