Hi,
I have two UDP listener sockets in a worker thread (I use a thread because is a 
DLL). When I receive any data in the OnDataAvailable, ReceiveFrom method call 
return -1 and OnDataAvailable is triggered in a infinite loop. The same code 
with Receive method works fine.
What is wrong? Could be a bug in ReceiveFrom? Any idea?

Sockets options:

        server1->MultiThreaded   = true; //it's neccesary?
        server1->OnDataAvailable = SocketDataAvailable1;
        server1->Proto             = "udp";
        server1->Addr              = "0.0.0.0";
        server1->MultiCast = true;
        server1->MultiCastAddrStr = "Multicast addr";
        server1->ReuseAddr = true;
        server1->Port              = PORT1;

        server2->MultiThreaded   = true;  //it's neccesary?
        server2->OnDataAvailable = SocketDataAvailable2;
        server2->Proto             = "udp";
        server2->Addr              = "0.0.0.0";
        server2->MultiCast = true;
        server2->MultiCastAddrStr = "Multicast addr";
        server2->ReuseAddr = true;
        server2->Port              = PORT2;

SocketDataAvailable1 y 2

        int rec, FromIPLen;
        TSockAddrIn FromIP;
        int leidos = 0;
        int procesados = 0;
        char block[TAM_BUFFER];
        std::string frame;

        if (Error == 0)
        {
                do
                {
                        rec = server->ReceiveFrom(block, sizeof(block), FromIP, 
FromIPLen); //First call return -1
                        //rec = server->Receive(block, sizeof(block));  //With 
this, it works fine
                        if (rec > 0)
                        {
                                std::string buf;
                                buf.assign(block, rec);
                                frame += buf;
                                leidos = leidos + rec;
                        }
                }while (rec > 0 && rec == sizeof(block));

 
               if (leidos > 0)
               {
                         LOGIN("Received :%s, %d.", frame.c_str(), leidos);
               }
        }

message pump

        while(!Terminated)
        {
                while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) != 0)
                {
                        // Windows specific messages
                        DispatchMessage(&msg);

                        if(msg.message == WM_QUIT)
                        {
                                server1->Close();
                                server2->Close();
                                this->Terminate();
                                break;
                        }
                        else if(msg.message == MY_MESSAGES)
                        {
                                Proccess_My_Messages
                        }
                }
                if (!Terminated)
                {
                        WaitMessage();
                }
        }

Thanks for all help.
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to