Server naslouchající na UDP a TCP

programmer

Server naslouchající na UDP a TCP
« kdy: 14. 04. 2011, 12:19:11 »
Vytvarim aplikaci serveroveho typu, ktera nasloucha na UDP i TCP portu soucasne (jeden port). Nastal problem pri prijmu dat a nevim jak ho vyresit.

Kdyz server komunikuje pouze pres jeden typ protokolu, vse je ok. Problem nastava, kdyz zacnou chodit pozadavky a kombinuji se oba protokoly.
Presneji: Pokud je prvni pozadavek pres protokol TCP, UDP uz nefunguje. Funguje pouze TCP. Stejne tak to plati opacne. Vzdy jakoby se vybral jeden typ protokolu a druhy zablokoval.

Ukazka kodu:
Kód: [Vybrat]
FD_ZERO(&set);
FD_SET(udp, &set);
FD_SET(tcp, &set);
while(1) {
if (select(MAX(udp,tcp)+1, &set, NULL, NULL, NULL) <= 0) {
// err ...
}
if (FD_ISSET(udp, &set)) {
n = recvfrom(udp, ptr, size, 0, (struct sockaddr *)&addr, &size2);
// ...
} else { // Puvodne byl zde if (FD_ISSET(tcp, &set)) { ..., ale chovalo se to stejne
int client = accept(tcp, (struct sockaddr *)&addr, &size2);
n = read(client, ptr, size);
// ...
close(sclnt);
}
}
« Poslední změna: 14. 04. 2011, 17:49:34 od Petr Krčmář »


Sten

Re: Server naslouchajici na UDP a TCP
« Odpověď #1 kdy: 14. 04. 2011, 13:26:22 »
Ten fdset pro select naplňujete jenom jednou, po úspěšném selectu tak v něm je jenom selectovaný file descriptor.

programmer

Re: Server naslouchajici na UDP a TCP
« Odpověď #2 kdy: 14. 04. 2011, 14:18:01 »
Ten fdset pro select naplňujete jenom jednou, po úspěšném selectu tak v něm je jenom selectovaný file descriptor.
Ok, fajn. Puvodne jsem mel nulovani a nastavovani mnoziny fd v cyklu, ale stejne se to chovalo divne, takze jsem si nebyl moc jisty. Ted uz zrejme vim, kde byl problem. Jeste vyresit jeden problem a mam to :). Diky.