[解決済み] WSAEWOULDBLOCKエラーの解決方法
質問内容
Win7のアプリケーションで、TCP接続で2つのクライアントにデータを送信しています。テストしている間、私は私が得ることを発見した
WSAEWOULDBLOCK
というエラーが頻繁に発生します。そのため
このエラーを解決するために、例えばwhileループを組んでみました。
do
{
size_t value = ::send(); /*with proper arguments*/
}while(GetLastError() == 10035);
ということで、もし
error 10035
データを再送信します。
しかし、このwhileループは時々無限に実行され、私のアプリケーションは停止します。 デッドロックのような状態になります。ソケットのサイズを大きくしてみましたが、まだ役に立ちません。
を解決する方法をご存知の方がいらっしゃいましたら、教えてください。
WSAEWOULDBLOCK
のエラーについて教えてください。
解決方法を教えてください。
WSAEWOULDBLOCKは本当のエラーではなく、単に送信バッファが一杯であることを伝えるものです。これは、ネットワークを飽和させた場合や、相手側が単に受信データを確認しない場合に起こる可能性があります。select() 関数を見てください。バッファスペースが利用可能になるか、タイムアウトが発生するまで待つことができます。また、win32 イベントをストリームにバインドする方法もあり、これにより WaitForMultipleObjects で待ち時間を短くすることができます。
ところで、私は当初、あなたが「デッドロック」という言葉を使うことに反対したかったのですが、これも起こりうることなのです。もしあなたが次のリクエストを受け取る前に何らかのレスポンスを送信するのを待ち、相手側があなたのレスポンスを受け取る代わりに次のリクエストを送信しようとした場合、あなたのアプリケーションは事実上デッドロックに陥ります。select() を使用すると、データを送信できるのか、データを受信できるのか、あるいは接続に失敗したのかを判断することができます。これにより、これらのケースが発生した際に正しく処理することができます。
注:また、あなたのコードは、実際にはsocket()の呼び出しではなく、send/recvの呼び出しであると仮定しています。
関連
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】Enterキーを押して続行する
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Windowsにpipをインストールするにはどうしたらいいですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] Node.js/Windowsのエラーです。ENOENT, stat 'C:\Users﹑RTAppData﹑Roaming﹑npm'.
-
[解決済み】WindowsでTCPまたはUDPポートをリッスンしているプロセスを見つけるにはどうすればよいですか?
-
[解決済み】SO_REUSEADDRとSO_REUSEPORTはどう違うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++