WSAWaitForMultipleEventsを使用時に永久ループに入る – プログラミング – Home

通知
すべてクリア

WSAWaitForMultipleEventsを使用時に永久ループに入る


鈴木智喜
 鈴木智喜
(@鈴木智喜)
ゲスト
結合: 18年前
投稿: 1
 

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;
}
}
}


引用解決済
トピックタグ

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました