私は基本的なチャットプログラムを作っていますが、問題があります。 recv(socket、buf、buflen、0)がC++で非同期であるかどうか尋ねたがっていますか?私はwhileループでそれを使用しており、サーバーがクライアントにデータを送信しない限りループをブロックします。C++ recv非同期サーバー - クライアント
0
A
答えて
0
ソケットは、デフォルトでブロッキングI/Oをでブロックします。 ノンブロッキングI/Oを使用する場合は、Windowsではioctlsocket(FIONBIO)
、他のプラットフォームではfcntl(O_NONBLOCK)
を使用して明示的に有効にする必要があります。呼び出し側をブロックする場合は、検出可能なエラー((WSA)EWOULDBLOCK
、EAGAIN
、EINPROGRESS
など)でI/O操作が失敗し、後で操作を繰り返すことができます。
または、select()
または(e)poll()
を使用して、読み取り/書き込み可能な状態になるのを待ってから、読み取り/書き込み操作をブロックします。または、一部のプラットフォームでは、setsockopt()
を使用して、読み取り/書き込み操作をブロックするためにSO_RCVTIMEO
/SO_SNDTIMEO
のタイムアウトを有効にすることができます。
あなたは非同期代わりに、I/Oを(動作を開始し、それがバックグラウンドで完了し、その後終了したときに通知し)たい場合は、別のワーカースレッドへのI/Oを移動するか持っている、またはWindows上のオーバーラップI/OおよびI/O完了ポートをサポートする拡張ソケット関数(ConnectEx()
、WSARecv()
、WSASend()
など)を使用できます。
関連する問題
- 1. apache thrift C++非同期クライアント
- 2. 同じオープンソケット上の非同期マルチ方向サーバー - クライアント通信?
- 3. 非同期シングルサーバ複数のクライアントがC#
- 4. C#の非同期Webサーバ - クライアント
- 5. 非同期RESTクライアント
- 6. C++非同期ネットワークプログラミング
- 7. TCPクライアント非同期コールバックモード
- 8. WCF非同期サービスと非同期クライアントの契約
- 9. クライアント/サーバーの非同期通信にGZipStreamを使用する
- 10. 非同期サーバー側TCP/IP
- 11. Cの非同期ブロードキャストクライアント#
- 12. C++非同期セグメントエラー
- 13. C++非同期ループ
- 14. Windows非同期RPC C++ MIDL
- 15. WCF非同期サーバー側の処理
- 16. 非同期TCPサーバ/クライアントのアプローチ
- 17. 非同期TCPクライアント接続でハングアップ
- 18. C#非同期サーバーソケット定義?
- 19. qt非同期クライアントの応答gsoap
- 20. 最新のScala用非同期httpクライアント?
- 21. 意味:「クライアント側の非同期フレームワーク」
- 22. 非同期ツイスト通話を使用する同期クライアントのリファクタリング
- 23. シンプルなHTTPクライアントC用のrecv()ブロック
- 24. Cソケット:recvと同時に送信
- 25. C#非同期処理オペレーションエラー
- 26. C#での非同期プログラミング
- 27. C#5と非同期タイマー
- 28. 非同期式はC#
- 29. C#プログラムの非同期フロー
- 30. C#:LINQの非同期