winsock の recv() ループで問題が発生しています。iResult==0 のときにループを終了しようとしていますが、ループはソケットが閉じたときにのみ終了します。iResult が 0 になる最後の recv() でハングしているようです。ループを効果的に終了する方法について何かアイデアはありますか? 私の最終的な目標 (iResult == 0 であるかどうかに関係なく、おそらくこれについて間違った方法で行っている可能性があります) は、送信されたすべての情報が読み取られたときにループを停止することです。これがループです。
do
{
iResult = recv(socket, recvbuf, BUFLEN-1, 0);
if(iResult > 0){
// Null byte :)
// Remove that garbage >:(
recvbuf[iResult] = '\0';
printf("Recvbuf: %s\n\n\niResult: %d\n",recvbuf,iResult);
continue; // working properly
}
else if(iResult == 0)
// Connection closed properly
break;
else
{
printf("ERROR! %ld",WSAGetLastError());
break;
}
} while(iResult > 0);
私が言ったように、私はすべてのデータを受け取っていますが、ループを終了できません。次のステップは、データをサーバーに書き戻すことですが、ping タイムアウトまでここでハングします。ソケットは SOCK_STREAM で、BUFLEN は 0x200 として定義されています
ありがとう