2

Linux から Windows にいくつかの単体テストを移植する際に、奇妙な問題に遭遇しました。テストでサーバー ソケットをシャットダウンすると、shutdown() は -1 を返しますが、WSAGetLastError() は 0 を返します (そして getsockopt( with SO_ERROR ) は 0 を返し、GetLastError() は 0 を返します)...だから、shutdown( ) はエラーがあることを教えてくれますが、その問題が何であるかを確認するための通常の呼び出しはすべて「問題ありません!」を返しています...これを前に見た人はいますか?

shutdown を呼び出すコードは次のようになります。

int ret = ::shutdown( _sok, mode );
if( ret < 0 )
    X_THROW(( XSDK::ModuleId, XSDK::F_OS_ERROR, "Unable to shutdown socket."));

例外をキャッチすると、それらすべての GetLastError() 関数を呼び出します...スローすると最後のエラーがリセットされますか?

4

1 に答える 1

2

答えは、ほぼすべてのシステム コールが Win32 の「LastError()」エラーをクリアできるということになりました...私の場合、例外をスローすると、メッセージのフォーマットとログが作成され、エラーが明確になりました... catch(...) ですぐに WSAGetLastError() を呼び出していましたが、もう手遅れでした...

于 2010-11-10T22:51:40.840 に答える