Do spisu tresci tematu 9
9.2.5. Gniazda i RPC - Rozglaszanie (clnt_broadcast)
Dzialanie
Na stronie tej omieszczony jest opis dzialania funkcji
clnt_broadcast()
enum clnt_stat
clnt_broadcast(prog,vers,proc,xargs,argsp,xresults,resultsp,aechresult)
u_long prog,vers,proc /* numer programu,wersji,procedury
xdrproc_t xargs,xresults /* filtry xdr do obslugi danych nadawanych
/* i przyjmowanych
resultproc_t eachresult /* funkcja wywolywana automatycznie dla
/* kazdego otrzymanego wyniku
Funkcja na poczatku wypelnia strukture identyfikacyjna AUTH
uzywajac funkcji authunuix_create_default(), tworzy sobie nowe
gniazdo, nastepnie ustawia na nim opcje SO_BROADCAST. Na zmienna addr pobiera
adresy udostepnione przez serwera nazw, lub dostepne przez plik /etc/hosts, oraz
na zmienna nets wpisuje liczbe tych adresow. Wypelnia strukture baddr.sin_port
na numer portmapera, sin_family na AF_INET ... . W kolejnym kroku
wypelnia strukture msg typu struct rpc_msg
wstawiajac odpowiednie numery programu, wersji... i ustawiajac kierunek
wiadomosci na CALL.
Przy pomocy potoku XDR "w pamieci" do lokalnego
bufora kodowane sa odpowiednio wiadomosc (msg) i argumenty wywolania procedury.
Kolejna czynnoscia jest wykonanie petli w ktorej pod kazdy uzyskany poprzednio
adres wysylamy kilkakrotnie wiadomosc zakodowana w naszym buforze i oczekujemy
na odpowiedz. O ile nie nadejdzie w odpowiednim czasie to uznajemy ze nasze
wywolanie bylo bledne i zwracamy kod bledu, wpp wywolujemy funkcje
eachresult(), ktora zwraca nam wartosc typu bool_t czy wywolanie
zakonczylo sie sukcesem czy porazka.
bool_t eachresult(resp,raddr)
caddr_t resp /*wskaznik do odpowiedzi
struct sockaddr_in raddr /*adres serwera
Gdzie raddr jest adresem serwera ktory odpowiedzial
na nasze rzadanie (jesli w ogole taka odpowiedz uzyskalismy), a resp jest
wskaznikiem do odpowiedzi, ktora wyluskalismy z wiadomosci powrotnej od
wyzej wymienionego serwera.
Bibliografia
- Biblioteka LIBC, pliki:
./rpc/*
- R. Stevens: ,,Programowanie zastosowan sieciowych''
- M. Gabbasi, B. Dupouy: ,,Przetwarzanie rozproszone w systemie UNIX''
Autor: Pawel Glebocki