- ベストアンサー
winsockでソケット通信の開発をしていますが、
winsockでソケット通信の開発をしていますが、 send()を5回実行したところで10053のエラーが起きてしまいます。 必ず同じところでエラーになってしまうのですが、 同じ症状になってしまった方いらっしゃられないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>クライアントから接続し、サーバでacceptした後、 > クライアントからsend()→サーバでrecv() > サーバからsend()→クライアントでrecv() >を繰返しており、 recv()しているならばバッファがあふれている…とは思えませんが…… ちなみに送信側で1回send()したからといって、受信側で同じサイズを指定したrecv()で受信できるとは限らない。 という辺り大丈夫…ですよね? # プロトコルによってはsend()に間隔が開くのでそのまま流れるコトもあるかも知れませんが…。 # 実際のところはTCP/IPスタックなどによる…でしょう。 >不正終了したとかを疑うべきなのでしょうか? クライアント側が…ということならば、確認してみるべきかと。 あとは…パケットキャプチャソフトなどで双方のやりとりを確認してみるとか…でしょうか。 wiresharkやtcpdumpで…。 >直前にselectして書き込み可能な状態なのを確認しているのですが、 >それでも10053のエラーが起きてしまいます。 select()で確認できるのは…自分の方の送信バッファに空きがあるか… ということではないかと。 バッファから相手に送る際に接続が切れたりすると、応答がなくなりますからエラーになるかと思われます。 # その際のエラーコードが10053かは不明ですが…。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
とりあえず… 受信側は正しく動作していますか? >10053のエラー WSAECONNABORTEDです。 ErrorLookupでは…「確立された接続がホスト コンピュータのソウトウェアによって中止されました。」 となります。 受信側がrecv()していなくて受信バッファがあふれたとか、 受信側のソフトが不正終了したとか、 接続したまま長時間放置していて経路の途中で切られたとか…
補足
回答ありがとうございます。 クライアントから接続し、サーバでacceptした後、 クライアントからsend()→サーバでrecv() サーバからsend()→クライアントでrecv() を繰返しており、 5回目のサーバからsend()の時に10053のエラーが起きているようです。 この場合はクライアントのほうの受信バッファがあふれたとか、 不正終了したとかを疑うべきなのでしょうか? 直前にselectして書き込み可能な状態なのを確認しているのですが、 それでも10053のエラーが起きてしまいます。
お礼
抽象的な質問に答えてくださりありがとうございました。 おかげさまで問題を解決することが出来ました。
補足
>recv()しているならばバッファがあふれている…とは思えませんが…… すみません。バッファがあふれているようでした。 char aaa[1000]; char memset(aaa,0x00,sizeof(aaa)); strcpy(aaa,"hogehoge"); として、sendのところで send(sock, aaa, sizeof(aaa)); で呼び出しているんですが、 なぜか5回目のところで1000バイトを送ってしまっていたようです。 受信側に1000バイトの受信能力がなかったためエラーになっているようでした。