私は基本的なチャットプログラムを作っていますが、問題があります。 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. 同時gRPCクライアントは、同期/非同期サーバー
- 3. 非同期シングルサーバ複数のクライアントがC#
- 4. C#の非同期Webサーバ - クライアント
- 5. 同じオープンソケット上の非同期マルチ方向サーバー - クライアント通信?
- 6. 非同期RESTクライアント
- 7. サーバーとの同期クライアントが
- 8. C++非同期ネットワークプログラミング
- 9. C#非同期チャットサーバー
- 10. TCPクライアント非同期コールバックモード
- 11. Apache Http非同期クライアント
- 12. サーバーからクライアントへの非同期メッセージの送信
- 13. WCF非同期サービスと非同期クライアントの契約
- 14. java jeromqを使用した非同期クライアント/サーバー
- 15. クライアント/サーバーの非同期通信にGZipStreamを使用する
- 16. クライアント側非同期。サーバー側のレンダリングでのリクエスト
- 17. 非同期サーバー側TCP/IP
- 18. Cの非同期ブロードキャストクライアント#
- 19. C++非同期セグメントエラー
- 20. C++非同期ループ
- 21. Windows非同期RPC C++ MIDL
- 22. WCF非同期サーバー側の処理
- 23. 非同期TCPサーバ/クライアントのアプローチ
- 24. C#非同期サーバーソケット定義?
- 25. 非同期TCPクライアント接続でハングアップ
- 26. シンプルなHTTPクライアントC用のrecv()ブロック
- 27. 最新のScala用非同期httpクライアント?
- 28. 意味:「クライアント側の非同期フレームワーク」
- 29. SignalR .Netクライアント非同期再接続
- 30. qt非同期クライアントの応答gsoap