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