[英]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.