On Mon, 2003-02-10 at 22:37, Mihai RUSU wrote:
> 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.

Ma faci sa-ti mai citez inca o data din man select: "more precisely, to
see if a read will not block". Care read? Care urmeaza dupa select
bineinteles. Mie-mi pare destul de clar...

O fi sistemul multitasking dar nimic nu modifica starea unui fd si a
buffer-elor asociate in afara de operatiile pe acel fd. Nimic nu se
intampla aiurea, kernelul nu se apuca de nebun sa modifice starea
descriptorilor. Asa ca fi sigur ca daca select iti spune ca un fd e
writable si nu se mai atinge nimeni de el, peste o ora tot writable o sa
fie. Garantat.

Daca ar fi cum zici tu, atunci folosirea poll/select pe descriptori
blocking nu ar avea nici un sens, ar fi de-a dreptul gresita: ce folos
sa stii ca puteai scrie un fd in urma cu x ticks? Cat e x?

Exista o intreaga tehnica I/O dezvoltata in jurul select/poll si ea nu
se bazeaza pe descripori non-blocking ci doar pe proprietatile
select/poll. man select_tut, vezi "port forwarding example" - fara NB.
Uita-te si la "select laws" tot acolo, poate te lamuresti mai bine.

O_NONBLOCK nu e necesar.

-- 
Florin Malita      web:        http://www.malinux.net
                   public key: http://www.malinux.net/data/fmalita.gpg

-- Attached file included as plaintext by Listar --
-- File: signature.asc
-- Desc: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQA+SBqz9npXhj/Ohf8RArLPAJ9XhlGXLE1FvJrKNndN9sTAPr1OLQCeIiZi
1xMvUA7pp8DEQV336st3sXk=
=OACX
-----END PGP SIGNATURE-----


--
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