ソケットrecv()呼び出しをループするTCP/IPアプリケーションをWindows7に実装しています。少量のデータ(<5 MB)の場合は正常に機能しますが、大量のデータ(> 20 MB)の場合、その間にrecvが失敗します。
詳細:私のアプリは、同じマシンで実行されているHTTPサーバーと通信する必要があります。このシーンでは、tcpアプリが大量のデータをHTTPサーバーに送信しています。
エラー=2になり、recvは0を返します。
エラー2はENOENTを意味しますが、それはどういう意味ですか?。誰かがこれが(ソケットに関して)何であるか、そして私がこれを回避する方法を知っていますか?
msgLen = recv(s,msg,BUFFER_SIZE,0);
if(msgLen > 0)
{
// do processing
}
else
{
printf("\n no data received .... msgLen=%d",msgLen);
printf("\n no data received .... errno=%d",errno);
}
コメントごとにコードを更新
msgLen = recv(s,msg,BUFFER_SIZE,0);
if(msgLen > 0)
{
// do processing
}
else if(msgLen == 0)
{
printf("\n sender disconnected");
}
else
{
printf("\n no data received .... msgLen=%d",msgLen);
printf("\n no data received .... errno=%d",WSAGetLastError());
}
私が今得たエラーは次のとおりです。
- まず、recv = 0を何度も繰り返します。つまり、送信者が切断されます。
- 最後に、recvは-1を返し、error=10053です。
TCP/IPアプリケーションがHTTPサーバーにデータを送信しています。同じことが小さなデータでも問題なく機能しますが、問題は大量のデータにあります。HTTPサーバーがタイムアウトしていませんか?