UDPで相手がいない状態でデータを送信する

[戻る]
ロキ 2008/09/15(月) 22:30:15
こんにちは。よろしくお願いします。

UDPでデータを送受信するプログラムを作成しました。

・送信側
 1.ソケットをオープンする(socket)。
 2.ソケットをポート番号50000でバインドする(bind)。
 3.selectを使用し、データの受信を定期的に確認する(recvfrom)。
 4.データを送信する(sendto)。

・受信側
 1.ソケットをオープンする(socket)。
 2.ソケットをポート番号50001でバインドする(bind)。
 3.selectを使用し、データの受信を定期的に確認する(recvfrom)。

送信側から受信側へデータを送信すると、もちろんデータを受信できるのですが、
受信側がいない状態で、送信側からデータを送信すると、
受信側で何らかのデータを受信したような動作をします(詳しくは下記の★の部分)。
ちなみに、受信側がいる状態ではこのような動作はしません。
この様な動作をする原因は何なのでしょうか。
ご存知の方ご教授いただけないでしょうか。m(_ _)m

int CUDPSocket::RecvFrom(char IP[], int *Port, char Data[], int *DataSize)
{
    int R = SOCKET_NG;
    
    memcpy(&_Imp->_RecvFDS[1], &_Imp->_RecvFDS[0], sizeof(_Imp->_RecvFDS[0]));
    
    timeval TimeOut;
    TimeOut.tv_sec = 0;
    TimeOut.tv_usec = 1000;
    select(0, &_Imp->_RecvFDS[1], NULL, NULL, &TimeOut);
    
    if(FD_ISSET(_Imp->_Socket, &_Imp->_RecvFDS[1]))
    {
        sockaddr_in From;
        int FromSize = sizeof(From);
        int R_recvfrom = recvfrom
            (_Imp->_Socket, Data, *DataSize, 0, (sockaddr *)&From, &FromSize);
        ★R_recvfromにはSOCKET_ERRORが格納されるが、
        ★FD_ISSETが成功したことから、何らかのデータを受信したような動作をする。
        if(R_recvfrom != SOCKET_ERROR)
        {
            R = SOCKET_OK;
            
            *DataSize = R_recvfrom;
            
            strcpy(IP, inet_ntoa(From.sin_addr));
            *Port = ntohs(From.sin_port);
        }
    }
    
    return R;
}

古いスレッドには追加発言できません。