[so] tema 4 again
Mihai Mincu
so@cursuri.cs.pub.ro
Mon, 27 Dec 2004 19:49:45 +0200
1.In man se specifica pentru functiile send/recv faptul ca in anumite
conditii kernelul nu trimite toti nbytes specificati in apelul
functiei ci un numar mai mic, n pe care de altfel functia il si
intoarce. Sunt perfect de acord cand datele de trimis sunt >1500 oct,
si datorita procesului de encapsulare segmentul de date trebuie spart.
Nu se specifica exact cam care ar fi dimensiunea maxima a datelor de
trimis pentru care as putea fi sigur ca se trmit toate odata.
Atunci cand trimit cei len octeti de la client catre server (pentru
scriere) sau invers (la citire) fac verificarea sa fiu sigur ca sunt
trimisi toti.
In schimb toate celelate mesaje schimbate intre client si server sunt
extreme de mici (<64 octeti) si cum lucrez pe local loop le trimit si
presupun ca intregul mesaj e tranmis odata. E vreo problema??? As
putea face si aici verificari dar singura solutie ce imi vine acum in
minte e sa fac propria mea encapsulare, si nu cred ca scopul acestei
teme e sa reinventez TCP-ul=E2=80=A6 n-am facut-o nici anul trecut la PC
:-).=20
So, e OK sa fac presupunerea ca toate mesajele mai mici de 64 oct sunt
sigur transmise dintr-o bucata si doar pentru cele mai mari sa fac
verificarile de rigoare?
Daca la raspuns folosesc scirere asincrona pe socketi problema de mai
sus apare???
2.Coada asociata fiecarui thread trebuie sa fie nelimitata??? Adica
indiferent de cat de ocupate sunt threadurile noile cereri sunt puse
in coada, sau peste un maxim declarat se da mesajul 'Server full'???
3.In threadul principal al serverului select/pselect blocheaza doar
semanlele folosite de noi in program sau toate semnalele ce pot fi
blocate (pentru un caz real ultima solutie mi se pare mai buna, ca sa
evitam oprirea lui accidentala, dar poate nu convine la corectare :-)
Multumesc!