2

重複したソケット IO と IOCP を使用している場合に、システム エラーを処理する信頼できる方法を誰か提案してもらえますか?

この点に関して、MSDN の説明は扱いにくいです。戻りコードがGetQueuedCompletionStatusFALSE の場合GetLastError、失敗した操作のエラー コードを取得するために、後続の呼び出しが必要であることが示されています。WSAGetLastErrorただし、WSA 関数については、代わりに呼び出す必要があることがわかっています (GetLastErrorソケット エラーの場合は 0 を返します)。質問の最初の部分は、実際にはどのように機能するのかということです。

もう 1 つの問題は、完了パケットが によって抽出された場合のエラー処理GetQueuedCompletionStatusExです。MSDN では、この呼び出し自体のエラー処理についてのみ説明しており、個々の失敗した操作のエラー コードの取得については何も述べていません。

すべての応答とコメントに事前に感謝します。

4

1 に答える 1

2

虫眼鏡でMSDNを数時間実験して調べた後、次のことがわかりました。

http://msdn.microsoft.com/en-us/library/ms684342%28v=VS.85%29.aspx (OVERLAPPED 構造に関する記事、Internalフィールドの説明):

I/O 要求のエラー コード。要求が発行されると、システムはこのメンバーを STATUS_PENDING に設定して、操作がまだ開始されていないことを示します。要求が完了すると、システムはこのメンバーを完了した要求のエラー コードに設定します。

内部メンバーは、もともとシステムで使用するために予約されていたものであり、その動作は変更される可能性があります。

最後のフレーズはよく見えませんが、その通りだと思います。

于 2011-05-14T05:15:27.893 に答える