# Zkouška 28.1.2014

<{ForumPost(poster="jethro", timestamp=2015-01-28 23:07:29)}>
Dnes bylo za úkol napsat inetd.   
Máme konfigurák tvaru:  
<port> <wait|nowait> <cmd>  
  
Počet řádků není nijak omezen, na krásu parsování se nehledí, převod text-> struktura nebyl nijak hodnocen. Můžeme předpokládat, že je korektní  
  
Program na začátku načte konfigurák, nějak ho vypíše na výstup a pak se bindne na porty dle konfigurace a když se na ně něco připojí, tak spustí <cmd> a předá mu spojení:

* nowait -> udělá accept, deskriptory 0,1,2 nastaví na socket z acceptu a execne program (tudíž ten ani neví, že pracuje po síti)   
wait -> přímo poslouchací socket nastaví jako deskriptor 0 a execne program (a ten teprve volá accept)

Pokud přijde nový požadavek, tak se u nowait spustí další <cmd>, u wait si ho musí zpracovat <cmd> sám, dokud ten žije, tak se o poslouchací socket inetd nestará, když umře, tak ho při dalším požadavku znovu spustí.   
  
Klíčové věci: getaddrinfo (aby umělo IPv4 i IPv6), poll, zavírat dětem sockety, co nepotřebují, hlídat si mrtvé děti a uklízet po nich.   
První to vzdal asi po 4 hodinách, po asi 4:45 to měl první, celkem to dva vzdali a tři udělali, tuším za 2. Já jsem končil s jedničkou asi 21.15.  
Přikládám svoje řešení, docela funguje, chybu mi v něm nenašel.

*Attachments:*

- *[zk.tar.gz](/Forum%20archiv/Attachments/5477_d34b43740cf41492bf05977225b15624)*
- *[test.c](/Forum%20archiv/Attachments/5477_68e669d9273260e422c0a750ed7cf8d5)*
- *[inetd.c](/Forum%20archiv/Attachments/5477_62c638e9e86a6a29d6b7d7d02879fb2b)*

<{/ForumPost}>

<{ForumPost(poster="Katami", timestamp=2015-02-05 22:01:41)}>
čistě pro další generace. Toto zadání bylo 28.1.201**5**
<{/ForumPost}>

