アプリ版:「スタンプのみでお礼する」機能のリリースについて

winsockでソケット通信の開発をしていますが、
send()を5回実行したところで10053のエラーが起きてしまいます。
必ず同じところでエラーになってしまうのですが、
同じ症状になってしまった方いらっしゃられないでしょうか?

A 回答 (2件)

>クライアントから接続し、サーバでacceptした後、


> クライアントからsend()→サーバでrecv()
> サーバからsend()→クライアントでrecv()
>を繰返しており、

recv()しているならばバッファがあふれている…とは思えませんが……

ちなみに送信側で1回send()したからといって、受信側で同じサイズを指定したrecv()で受信できるとは限らない。
という辺り大丈夫…ですよね?
# プロトコルによってはsend()に間隔が開くのでそのまま流れるコトもあるかも知れませんが…。
# 実際のところはTCP/IPスタックなどによる…でしょう。

>不正終了したとかを疑うべきなのでしょうか?

クライアント側が…ということならば、確認してみるべきかと。
あとは…パケットキャプチャソフトなどで双方のやりとりを確認してみるとか…でしょうか。
wiresharkやtcpdumpで…。

>直前にselectして書き込み可能な状態なのを確認しているのですが、
>それでも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バイトの受信能力がなかったためエラーになっているようでした。

補足日時:2010/02/23 14:09
    • good
    • 0
この回答へのお礼

抽象的な質問に答えてくださりありがとうございました。
おかげさまで問題を解決することが出来ました。

お礼日時:2010/02/23 17:57

とりあえず…


受信側は正しく動作していますか?

>10053のエラー
WSAECONNABORTEDです。
ErrorLookupでは…「確立された接続がホスト コンピュータのソウトウェアによって中止されました。」
となります。

受信側がrecv()していなくて受信バッファがあふれたとか、
受信側のソフトが不正終了したとか、
接続したまま長時間放置していて経路の途中で切られたとか…

この回答への補足

回答ありがとうございます。

クライアントから接続し、サーバでacceptした後、
 クライアントからsend()→サーバでrecv()
 サーバからsend()→クライアントでrecv()
を繰返しており、
5回目のサーバからsend()の時に10053のエラーが起きているようです。
この場合はクライアントのほうの受信バッファがあふれたとか、
不正終了したとかを疑うべきなのでしょうか?

直前にselectして書き込み可能な状態なのを確認しているのですが、
それでも10053のエラーが起きてしまいます。

補足日時:2010/02/22 23:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!