next up previous contents
Next: Pseudoterminale Up: Zaawansowane programowanie gniazd Previous: Dane typu OOB   Contents

Współpraca z Inetd

Jeśli tworzymy jakiegoś demona sieciowego to warto się zastanowić, czy nie skorzystać z uslug inetd'a. Ten super-serwer zbliża kwestię programowania demonów sieciowych do poziomu zwyklych programików korzystająych ze standardwowych strumieni I/O.

Jak dziala inetd ? Przy starcie odczytuje swój plik konfiguracyjny (zazwyczaj /etc/inetd.conf). Na podstawie danych tam znalezionych tworzy odpowiednią ilość nasłuchujących gniazd - po jednym dla każdego zdefiniowanego serwisu. Następnie wykonuje select() na gniazdach czekając na połączenia przychodzące. Kiedy wreszcie wykryje, ze ktos "puka do drzwi" wywołuje accept() i tworzy nowy proces (fork()) obsługujący to konkretne połączenie. Kolejne kroki to przekierowanie stdin/stdout do gniazda (dup2()) oraz uruchomienie (exec*()) właściwego demona obsługującego daną usługę.

Jak widać cała robota związana z obsługą sieci jest przenoszona na inetd'a. Dzięki temu nasz demon może kontaktować się ze zdalnym klientem identycznie, jak z użytkownikiem operującym na lokalnej konsoli. Może swobodnie pisać na stdout (np. printf()) i czytać ze stdin (scanf(), read()). Zapewnia to także możliwość sieciowej komunikacji programom, które nie zawierają ani jednej linijki kodu sieciowego (vide /bin/bash na 31337 porcie ;).



Paweł Niewiadomski
2000-10-17