Do spisu tresci tematu 9
Sygnaly zwiazane z gniazdami
Spis tresci
Sygnal SIGIO
Ten sygnal wskazuje, ze gniazdo jest gotowe do wykonania operacji
wejscia-wyjscia. Sygnal jest wysylany do grupy procesow dla tego gniazda.
Grupe procesow ustanawia sie w wyniku wywolania funkcji systemowej ioctl
z okreslona opcja FIOSETOWN
lub SIOCSPGRP
,
albo funkcji systemowej fcntl
z opcja F_SETOWN
.
Sygnal ten jest wysylany do grupy procesow tylko wtedy, gdy proces - wywolujac
funkcje ioctl
z opcja FIOASYNC
lub funkcje
fcntl
z opcja F_SETFL
- udostepnil mozliwosc korzystania z
wejscia-wyjscia asynchronicznego w odniesieniu do danego gniazda.
Implementacja
Podczas tworzenia gniazda, wykonywane sa przypisania (sk - wskaznik na strukture
sock ):
- sk->state_change = def_callback1;
- sk->data_ready = def_callback2;
- sk->write_space = def_callback3;
- sk->error_report = def_callback1;
def_callback* sa to wskazniki na funkcje,zdefiniowane w odpowiednim pliku
af_inet lub af_unix. Tak wiec, kiedy np. naplyna do gniazda dane, zostanie
wykonana instrukcja sk->data_ready(...) - czyli def_callback2. Ta z kolei
wywola sock_wake_async(...), ktora wreszcie wywola kill_fasync(...) .Ta
ostatnia funkcja, zdefiniowana w fs/fcntl.c, wysle do wszystkich procesow
z listy nasze_gniazdo->fasync_list sygnal SIGIO.
Sygnal SIGURG
Ten sygnal wskazuje, ze gniazda dotyczy jakas sytuacja pilna.
Jest to albo nadejscie danych wysokopriorytetowych do gniazda (protokol TCP),
albo obecnosc informacji o stanie sterowania, ktora trzeba odebrac od czesci
nadrzednej pseudoterminala pracujacego w trybie pakietowym. Sygnal jest
wysylany do grupy procesow dla tego gniazda.
Sygnal SIGURG jest generowany przez warstwe TCP ( plik ip4/tcp_input.c, linia
1612 ).
Sygnal SIGPIPE
Ten sygnal wskazuje, ze nie mozemy juz dluzej wysylac danych do gniazda,lacza
komunikacyjnego lub kolejki FIFO - bo, na przyklad, zaden proces nie "slucha
na drugim koncu" lacza. Proces nie musi niczego specjalnego robic w celu
odebrania tego sygnalu, ale jesli proces go nie przechwyci, to czynnoscia
domyslna jest zakonczenie procesu. Sygnal jest wysylany tylko do procesu
zwiazanego z danym gniazdem, nie dotyczy zas grupy procesow.
SIGPIPE moze byc wyslany z funkcji sendmsg ( tu jest jej
opis ), a takze przez warstwe TCP
( funkcja do_tcp_sendmsg, plik i4/tcp.c ).
Bibliografia
- Zrodla kernela Linuxa 2.0.0 +
Linux Navigator
- W. Stevens "Programowanie zastosowan sieciowych"
Autor: Rafal Wojtczuk