Winsock2.0を利用したUDP通信プログラムを作成しています。
イベントオブジェクトを利用してUDPデータの受信を行っているのですが、FD_R
EADイベント時にデータを受信し送信元に返信する処理を追加すると、永久ループに
なる現象が出ています。(但し永久ループになるのは、送信先プログラムが受信処理を
行っていない場合です。)TCPの方では同様のコーディングで問題ありませんでし
た。
解決のヒントでもいただければ幸いです。よろしくお願いいたします。
---------------------------------------------------------------
while(1){
sts = WSAWaitForMultipleEvents(1,&eventobject,FALSE,1000,
FALSE);
if(sts == WSA_WAIT_TIMEOUT){
if(g_end_flag){
// 終了フラグを見て終了
break;
}
else{
continue;
// 再度イベント待ち
}
}
// どんなネットワークイベントが発生したかをマスクにセット
WSAEnumNetworkEvents(socket,eventobject,&eventmask);
// 受信イベント検知
if(eventmask.lNetworkEvents & FD_READ){
// 受信
fromlen=sizeof(fromaddr);
recvlen = recvfrom(socket,buffer,sizeof(buffer),0,
(sockaddr*)&fromaddr,&fromlen);
if (sts != SOCKET_ERROR){
buffer[recvlen]=0;
loggingdata(buffer,fromaddr); // メ
ッセージロギング
/*
ここに
sendto(socket,sendbuf,strlen(sendbuf),0,(sockaddr*)&fromaddr,sizeof
(sockaddr));を追加するとFD_READイベントが永遠に発生する
*/
}else{
errcom();
break;
}
}
}