probleme cu winsock

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
Vhaerun
Junior
Junior
Posts: 5
Joined: 11 Jul 2008, 14:17
Judet: Timiş

probleme cu winsock

Post by Vhaerun » 08 Sep 2008, 14:46

Salut !

Cum as putea forta un flush pe un socket de windows ? Stiu ca functia nu exista pt. socket-uri , dar chiar as avea nevoie sa fac un flush .
Daca de exemplu , inchid conexiunea dupa ce trimit datele ( cu shutdown(sockd,SD_SEND) atunci vor ajunge toate ) , dar am nevoie sa fac asta fara sa inchid conexiunea .
Mentionez ca send trimite numarul corect de date , adica exact cate sunt in bufferul ce vreau eu sa il trimit .



Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: probleme cu winsock

Post by Dark » 08 Sep 2008, 16:48

Poti pune TCP_NODELAY cu setsockopt() dupa ce faci socketul, dar asta inseamna ca toate pachetele vor fi trimise ASAP. Nu stiu sa existe o functie care sa faca ce vrei tu (exista SIO_FLUSH pentru WSAIoctl(), dar ala face discard la buffere, nu forteaza transmiterea).

Vhaerun
Junior
Junior
Posts: 5
Joined: 11 Jul 2008, 14:17
Judet: Timiş

Re: probleme cu winsock

Post by Vhaerun » 09 Sep 2008, 10:18

Oare daca as folosi WSASend in loc de send , as mai avea probleme cu buffering?

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: probleme cu winsock

Post by Dark » 09 Sep 2008, 13:11

Buffering-ul nu e o "problema", e un feature. Algoritmu' lu' Nagle imbunatateste in general performanta aplicatiilor TCP. Daca te deranjeaza poti sa-l dezactivezi cum am descris mai sus, dar poate nu ti-ai ales bine protocolul (s-ar putea ca UDP sa fie mai potrivit aplicatiei tale). Daca planuiai sa faci flush dupa fiecare send(), setsockopt() cu TCP_NODELAY face ce doresti tu. WSASend() n-are nici o treaba cu buffering-ul, scrie clar in MSDN la ce e bun:
MSDN wrote: The WSASend function provides functionality over and above the standard send function in two important areas:

It can be used in conjunction with overlapped sockets to perform overlapped send operations.
It allows multiple send buffers to be specified making it applicable to the scatter/gather type of I/O.

Vhaerun
Junior
Junior
Posts: 5
Joined: 11 Jul 2008, 14:17
Judet: Timiş

Re: probleme cu winsock

Post by Vhaerun » 09 Sep 2008, 14:27

Dark , scuze ca te tot bat la cap :)

In Java nu aveam problema asta , puteam face flush pe socket-uri si datele ajungeau cum trebuiau .
Am sa incerc sugestiile tale , si daca mai am probleme , postez .

Multumesc !

Dark
Banned
Banned
Posts: 75
Joined: 21 Nov 2007, 19:29
Judet: Bucureşti

Re: probleme cu winsock

Post by Dark » 09 Sep 2008, 16:40

Vhaerun wrote: In Java nu aveam problema asta , puteam face flush pe socket-uri si datele ajungeau cum trebuiau .
No way. Java are o mizerie de buffering IN PLUS fata de ce face stiva TCP/IP a sistemului si cind faci flush pur si simplu se cheama send(). Java n-are cum sa aiba o functie magica de flush, ca tot cu sistemul ajunge sa vorbeasca. De fapt care-i problema, cum adica datele nu ajung "cum trebuie"?

Post Reply