On 10 Feb 2003, Florin Malita wrote:

> Nu prea are ce sa se intample... Aici nu e vorba de acces concurent la
> socket (asa ceva oricum nu are sens), un singur thread lucreaza cu el -
> no race. Daca select zice ca e readable, inseamna ca exista ceva in
> buffer (sau a pleznit conexiunea) iar chestia aia nu dispare din senin.

Dar acel socket e pe un sistem de operare multitasking care se poate afla
in diferite conditii si nicaieri nu ii zice lui ca o data ce select()-ul
ti-a intors ca e bun de citire cand ajungi tu sa faci read() (foarte
posibil dupa ce face kernelul multe altele) sa mai fie bun de citire. Nu
vad nicaieri sa existe aceasta garantie. select()-ul iti intoarce doar
ca-i bun la citire in momentul selectului, nu ca ar fi si mai tarziu.
Adica daca selectul ti-a intors bun de scriere de exemplu si tu te
hotaresti sa scrii peste o ora crezi ca se pastreaza afirmatia ? Iar daca
nu zi-mi cu ce-i diferit un interval de 1 ora cu un interval de cateva ms
din punct de vedere al kernelului ? Aici nu discutam de instructiuni
atomice, adica dupa acel select nu urmeaza _sigur_ read-ul. Se pot
intampla foarte multe chestii.

In schimb setand O_NONBLOCK pe socket iti asigura ca nu se va bloca...

----------------------------
Mihai RUSU

Disclaimer: Any views or opinions presented within this e-mail are solely
those of the author and do not necessarily represent those of any company,
unless otherwise specifically stated.

--
Pentru dezabonare, trimiteti mail la 
[EMAIL PROTECTED] cu subiectul 'unsubscribe rlug'.
REGULI, arhive si alte informatii: http://www.lug.ro/mlist/


Raspunde prin e-mail lui