クライアントでIOCPを使用していますが、サーバーに接続するときにブロッキングコールを使用する方が便利です。だから、ブロックされていないConnectEx()
の代わりにブロックWSAConnect()
の使用に問題がありますか?WSAConnect()vs ConnectEx()
答えて
はい、問題ありません。
WSAConnect
を呼び出すと、接続が作成されるか、エラーが発生するまでスレッドがブロックされます。非同期IOを実行して、アプリケーションIOCPで完了したパケットに関する通知を受け取ることができます。 IOCPはWSAConnect
に関するパケットを与えません。
もう1つのポイントは、IOCPがオーバーラップIOで激しく動作することです。関数がOVERLAPPED
構造体(WSAConnect
など)のメモリ位置を消費しない場合、IOCPがそのAPI呼び出しを処理しないことを確認できます。たとえOVERLAPPED
が提供されたとしても、それはアクションが非同期であり、IOCPで公開されることを意味しません。
Cの場合はBoost.Asio
、Cの場合はlibuv
をご覧になりたい場合は、コードを移植しても問題ありません。別のintrestingプラットフォームはマイクロソフトCasablanca
ですが、これはクロスプラットフォームですが、私の経験ではパフォーマンスは致命的です。
* "OVERLAPPEDが指定されていても、そのアクションが非同期であり、IOCPに公開されるわけではありません" *あなたがステートメント。たとえば、 'WSARecv()'を呼び出してそれを 'OVERLAPPED'構造体に渡し、完了パケットを受け取らないことを意味しますか?たとえば、 – user6088487
の場合、 'ReadFile'と' WriteFile'は 'OVERLAPPED'を取得します。これは読み込みを開始するファイルのオフセットを指定します。ファイルハンドルが非同期アクション用に開かれていない場合、そのアクションは同期して完了します。 –
また、IOパケットを受け取るためには、ハンドルをIOCPに明示的に関連付ける必要があります。したがって、IOCPを取得するには、次の条件が必要であると結論してください。1)非同期IOをサポートするハンドルを持つ2)ハンドルをIOCPに関連付ける3) 'OVERLAPPED'構造体を消費する関数を使用する。いずれかの条件が当てはまらない場合、IOCPはその関数のために起動しません。 –
- 1. ConnectexなしのWindowsで非ブロッキングソケット接続
- 2. Quartz.NET vs JAMS vs?
- 3. _mm_load_ps vs. _mm_load_pd vs.
- 4. NetSqlAzMan vs AzMan vs(?????)
- 5. 場所vs GeoPoint vs 1E6 vs課金
- 6. hstack/vstack vs append vs concatenate vs column_stack
- 7. Application.Exit()vs Application.ExitThread()vs Environment.Exit()
- 8. MySQL vs Firebird vs SQLite
- 9. NSImage vs. CIImage vs. CGImage?
- 10. アクティブソリューションプラットフォームVSプロジェクトプラットフォームVSプラットフォームターゲット
- 11. java.lang.Void vs void vs Null
- 12. Image vs BitmapImage vs Bitmap
- 13. getBBox()vs getClientRects()vs getClientRects()
- 14. Express.js:app.locals vs req.locals vs req.session
- 15. RegAsm VS RegSvc32 VS GAC
- 16. DIP vs. DI vs. IoC
- 17. flume vs kafka vs他
- 18. 特性vs.ミックスインvs.
- 19. ARKit vs. ARCore vs. Vuforia vs. D'Fusionモバイルvs. Layar SDK
- 20. XAML vs WPF vs Store App vs Phone App vs UWA
- 21. Marshal.AllocHGlobal VS Marshal.AllocCoTaskMem、Marshal.SizeOf VSはsizeof()
- 22. Computed Column(COALESCE vs CASE vs ISNULL)
- 23. AutoPrefixer vs Prefixフリーvs Prefixr
- 24. C++ Builder vs Delphi vs MFC
- 25. Flex AMFPHP vs WebORB vs XMl
- 26. Javaタイムスタンプ:Joda vs Date vs Long
- 27. チタンVs Adobe Air Vs Phonegap
- 28. ANTLR vs. Happy vs.他のパーサージェネレーター
- 29. bgcolor vs background-color vs backgroundColor
- 30. ant + cpptasks vs. scons vs. make
なぜ同期I/Oが必要な場合は、IOCPをまったく使用していますか? – Mat
@Mat私がうまく理解すれば、OPは便宜上、ブロックするための 'connect'呼び出しを気にします。 @OPブロックする 'future'と' ConnectEx'を混在させたり、IOCPを使用してブロック動作を起こすことを '約束する'ことはできません。 –
@VeronikaPrüssels* "@ Mat私がうまく理解すれば、利便性の理由からOPはブロッキングに接続するコールを気にするだけです" *はい、これは私が望むものです。 * "@ OPなぜならBlockExとBlockExを混在させたり、IOCPを使用してブロックすることはできません。 – user6088487