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