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/
