Hi,

"Kiss Gábor" <ki...@ssg.ki.iif.hu> írta 2014-11-23 15:40-kor:
> Annak részeként character device-okon át elérhető kernel driverek
> működését szeretném utánozni user space-ben. (Vagy a /proc alatti
> egysoros file-okét.)
Két külön dolog.
char/block deviceok reagálnak mindenféle ioctl-ekre, socketek legjobb
emlékeim szerint nem.

> Egy démon létrehoz egy unix domain socketet, és várja a klienseket.
> Ha valaki ír bele, azt megjegyzi. Ha valaki olvas belőle, kiadja
> amit megjegyzett.

Mármint, ez az összes működése? Mi van, ha többen nyitják meg?
Picit tudnád ezt a működési algoritmust pontosítani?

> A f?? gond, hogy nem lehet a socket listener oldalán megállapítani,
> hogy a kliens olvasásra vagy írásra nyitotta-e meg.
Socket. Kétirányú, nem pipe! Lehet bele írni is, meg olvasni is belőle,
egyszerre. Like, when http-re kapcsolódsz. Az is socket, csak tcp-n:
Beleírod, hogy get http-ül szépen paraméterezve, cserébe kapsz egy http-ül
formázott fejlécet, majd (jó esetben) az annak megfelelő content-type-ú
választ. Esetleg innen újra játszhat az elejétől, vagy lezárod a socket.

> Így aztán bizonytalan, hogy accept után a démon indítsa-e a
> küldést, vagy várjon a bejövő adatra.
Mi a pontos "működési algoritmus"?
Esetleg próbáltál már valami állapotdiagramot rajzolni az egyes
socketekhez? Abból amit írtál bármi lehet. select(), meg más poll-félék a
te barátaid. Ha ezerszám kell párhuzamosan ilyet kezelj, akkor epoll() meg
ilyen újmódi dolgoknak célszerű utánanézni, ha csak PoC kód, akkor select()
bőven jó.

> Most mindkettőt csinálja, és a flush meg a shutdown környékén
> van a probléma. Az output irány lezárása azt eredményezi,
> hogy az olvasás is megszakad azzal, hogy 0 byte jött, a kliens
> megszakította a kapcsolatot.
És ez nincs így jól? Mi a probléma evvel? Mit szeretnél, hogy történjen?

BTW.: Ha pl. select szerint nem blokkol a read az fd-ből, és mégis 0-t
olvasol belőle, az azt jelenti, hogy a kliens már lezárta a csatornát.
Gondolom socketeknél is van olyan féloldalas lezárás, mint tcp-nél, hogy ő
jelzi, hogy többet már nem akar írni bele, de olvasni azért még olvashat
belőle. Ezt most nem csekkoltam.
Ill, még egy tipp: Én, ha ilyesmit akarnék írni, és bizonytalan vagyok,
akkor megnézném a socat forrását is! ;-) (Talán tanulságosabb a kész kód,
mint 0-ról olvasgatni a manokat a manpages-dev -ből.)

Üdv,
Gyur!
_________________________________________________
linux lista      -      linux@mlf.linux.rulez.org
http://mlf.linux.rulez.org/mailman/listinfo/linux

válasz