rpc_svc_create(3N) rpc_svc_create(3N)
NAME
rpcsvccreate: svccreate, svcdestroy, svcdgcreate, svcfdcreate,
svcrawcreate, svctlicreate, svctpcreate, svcvccreate - Bibli-
otheksroutinen für die Erzeugung von Serverhandles
BESCHREIBUNG
Diese Routinen sind Teil der RPC-Bibliothek, die C-Programmen ermög-
licht, Prozeduraufrufe auf Servern über ein Netzwerk durchzuführen.
Diese Routinen betreffen die Erzeugung von Serverhandles. Wenn ein
Handle einmal erzeugt wurde, kann der Server durch einen Aufruf von
svcrun gestartet werden.
Wenn Sie eine der rpc-Funktionen verwenden, müssen Sie bei der Über-
setzung die Bibliothek libnsl dazubinden (cc -lnsl).
Routinen
Die Definition der Datenstruktur SVCXPRT ist in rpc(3N) beschrieben.
#include <rpc/rpc.h>
int
svccreate(const void (*dispatch)(const struct svcreq *,
const SVCXPRT *), const ulong prognum, const ulong versnum,
const char *nettype);
svccreate erzeugt Serverhandles für alle Transporte, die zur
Klasse nettype gehören.
nettype definiert eine Klasse von Transporten, die für eine
bestimmte Anwendung verwendet werden können. Die Transporte wer-
den in der Reihenfolge von links nach rechts in der Variable
NETPATH und von oben nach unten in der netconfig-Datenbank aus-
probiert.
Wenn nettype NULL ist, wird standardmäßig netpath genommen.
svccreate registriert den Dienst bei rpcbind [siehe
rpcbind(1M)]. dispatch wird aufgerufen, wenn ein ferner Prozedu-
raufruf für die angegebenen Nummern prognum und versnum ein-
trifft. Dies erfordert den Aufruf von svcrun [siehe svcrun in
rpcsvcreg(3N)]. Im Erfolgsfall liefert svccreate die Anzahl
der Serverhandles zurück, die es erzeugt hat. Andernfalls wird 0
zurückgegeben und die Fehlermeldung wird protokolliert.
void
svcdestroy(SVCXPRT *xprt);
Ein Funktionsmakro, das das Serverhandle xprt des RPC-Dienstes
löscht. Das Löschen schließt normalerweise die Freigabe privater
Datenstrukturen mit ein (einschließlich xprt selbst). Die Verwen-
dung von xprt nach einem Aufruf dieser Routine ist nicht erlaubt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
rpc_svc_create(3N) rpc_svc_create(3N)
SVCXPRT *
svcdgcreate(const int fd, const uint sendsz, const uint recvsz);
Diese Routine erzeugt ein Serverhandle für verbindungslose Dien-
ste und liefert einen Zeiger auf das erzeugte Handle zurück. Im
Fehlerfall liefert die Routine NULL zurück und es wird eine Feh-
lermeldung protokolliert. Die beiden Parameter sendsz und recvsz
sind die Größenangaben der Sende- und Empfangspuffer. Wenn die
Werte 0 sind, werden geeignete Standardwerte ausgewählt. Der
Dateideskriptor fd sollte zu einer geöffneten und verbundenen
Datei gehören und an eine Adresse gebunden sein.
Warnung:
Da auf verbindungslosem Transport basierende RPC-Nachrichten nur
eine begrenzte Anzahl an verschlüsselten Daten enthalten können,
kann dieser Transport nicht für Prozeduren verwendet werden, die
extrem große Argumente benötigen oder große Ergebnisse zurücklie-
fern.
SVCXPRT *
svcfdcreate(const int fd, const uint sendsz, const uint recvsz);
Diese Routine generiert ein Dienstobjekt für einen Dateideskrip-
tor einer geöffneten Datei, der an eine Adresse gebunden ist, und
liefert den Zeiger auf das erzeugte Handle zurück. Üblicherweise
gilt der Dateideskriptor für einen verbindungsorientierten Trans-
port, und die Verbindung besteht bereits. sendsz und recvsz geben
die Größen der Sende- und Empfangspuffer an. Falls diese den Wert
0 haben, werden geeignete Standardwerte ausgewählt. Die Routine
liefert im Fehlerfall NULL zurück, und es wird eine Fehlermeldung
protokolliert.
SVCXPRT *
svcrawcreate(void);
Diese Routine erzeugt ein Serverhandle für Pseudo-RPC und liefert
einen Zeiger auf das Handle zurück. Der "Transport" ist in Wirk-
lichkeit ein Puffer innerhalb des Prozeßadreßraums. Deshalb
sollte sich der entsprechende RPC-Client innerhalb desselben
Adreßraums befinden [siehe clntrawcreate in
rpcclntcreate(3N)]. Die Routine ermöglicht die Simulation von
RPC ohne den Einfluß des Kerns. Die Routine liefert im Fehlerfall
NULL zurück, und es wird eine Fehlermeldung protokolliert.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
rpc_svc_create(3N) rpc_svc_create(3N)
SVCXPRT *
svctlicreate(const int fd, const struct netconfig *netconf,
const struct tbind *bindaddr, const uint sendsz,
const uint recvsz);
Diese Routine erzeugt ein RPC-Serverobjekt und liefert den Zeiger
auf das Handle zurück. fd ist der Dateideskriptor für den Dienst.
Falls fd den Wert RPCANYFD hat, öffnet die Routine eine Datei
für den Transport, der durch netconf spezifiziert ist. Falls der
Dateideskriptor nicht gebunden ist, wird er an die Adresse gebun-
den, die in bindaddr angegeben ist, wenn diese Adresse nicht NULL
ist. Ansonsten wird er an eine Datei mit einer Standardadresse
gebunden, die anhand des Transports ausgewählt wird. Falls eine
Standardadresse gewählt wird, wird die Anzahl offenstehender Ver-
bindungsanfragen für verbindungsorientierte Transporte auf 8
gesetzt. Der Benutzer kann die Größe der Sende- und Empfangspuf-
fer durch die Parameter sendsz und recvsz bestimmen. Bei Angabe
von 0 werden geeignete Standardwerte gewählt. Die Routine liefert
im Fehlerfall NULL zurück, und es wird eine Fehlermeldung proto-
kolliert.
SVCPRT *
svctpcreate(const void (*dispatch)(const RQSTP *, const SVCXPRT *),
const ulong prognum, const ulong versnum,
const struct netconfig *netconf);
svctpcreate erzeugt ein Serverobjekt für den Transport, der
durch netconf festgelegt ist, und registriert sich selbst mittels
rpcbind. Bei einem fernen Prozeduraufruf für das gegebene Pro-
gramm prognum der Version versnum wird dispatch aufgerufen. Dies
erfordert den Aufruf von svcrun. svctpcreate liefert im
Erfolgsfall einen Zeiger auf das Serverhandle zurück. Andernfalls
wird NULL zurückgeliefert und eine Fehlermeldung protokolliert.
SVCXPRT *
svcvccreate(const int fd, const uint sendsz, const uint recvsz);
Diese Routine erzeugt ein RPC-Serverhandle für verbindungs-
orientierte Transporte und liefert einen Zeiger auf das Handle
zurück. Der Benutzer kann die Größen von Sende- und Empfangspuf-
fer durch die Parameter sendsz und recvsz festlegen. Bei Angabe
der Größe 0 werden geeignete Standardwerte ausgewählt. Der Datei-
deskriptor fd sollte zu einer geöffneten Datei gehören und an
eine Adresse gebunden sein. Im Fehlerfall wird NULL zurückgelie-
fert, und es wird eine Fehlermeldung protokolliert.
SIEHE AUCH
rpcbind(1M), rpc(3N), rpcsvccalls(3N), rpcsvcerr(3N),
rpcsvcreg(3N).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98