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