Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
#include <netinet/in.h> #include <arpa/nameser.h> #include <resolv.h> extern struct state _res;int res_init(void);
int res_query(const char *dname, int class, int type,
unsigned char *answer, int anslen);int res_search(const char *dname, int class, int type,
unsigned char *answer, int anslen);int res_querydomain(const char *name, const char *domain,
int class, int type, unsigned char *answer, int anslen);int res_mkquery(int op, const char *dname, int class, int type,
char *data, int datalen, struct rrec *newrr, char *buf, int buflen);int res_send(const char *msg, int msglen, char *answer,
int anslen);int dn_comp(unsigned char *exp_dn, unsigned char *comp_dn,
int length, unsigned char **dnptrs, unsigned char *exp_dn, unsigned char **lastdnptr);int dn_expand(unsigned char *msg, unsigned char *eomorig,
unsigned char *comp_dn, unsigned char *exp_dn, int length);
Die Funktion res_init() liest die Konfigurationsdateien (siehe resolv+(8)), um den vorgegebenen Domainnamen, ide Suchreihenfolge und Nameserveradresse(n) zu erhalten. Wenn kein Server angegeben ist, wird der lokale Host verwendet. Wenn keine Domain angegeben ist, wird diejenige benutzt, die mit dem lokalen Host in Verbindung gebracht wird. Dies kann mit der Umgebungsvariable LOCALDOMAIN überschrieben werden . res_init() wird normalerweise durch den ersten Aufruf von einer der anderen Funktionen ausgeführt.
Die Funktion res_query() fragt den Nameserver nach dem vollständigen Host- und Domainnamen von name vom spezifizierten type und class. Die Antwort verbleibt im Puffer answer der Länge anslen, der von Aufrufer angegeben ist.
Die Funktion res_search() macht eine Anfrage und wartet auf die Antwort wie res_query(), implementiert jedoch zusätzlich die Vorgabe- und Such-Regeln, die durch RES_DEFNAMES und RES_DNSRCH kontrolliert werden (siehe Beschreibung von _res-Optionen unten).
Die Funktion res_querydomain() macht eine Anfrage über res_query() auf die Verkettung von name und domain.
Die folgenden Funktionen sind Routinen tieferer Ebene, die von res_query() benutzt werden.
Die Funktion res_mkquery() konstruiert eine Anfrage-Nachricht für den Domainnamen dname in buf der Länge buflen. Der Anfragetyp op ist gewöhnlich QUERY, kann aber jeder der in <arpa/nameser.h> definierten Typen sein. newrr ist momentan unbenutzt.
Die Funktion res_send() sendet eine vorformatierte Anfrage, die in msg gegeben ist und die Länge msglen hat, und gibt die Antwort in answer zurück, die die Länge anslen hat. Sie ruft res_init() auf, wenn es noch nicht aufgerufen wurde.
Die Funktion dn_comp() komprimiert den Domainnamen exp_dn und speichert ihn in dem Puffer comp_dn der Länge length. Die Komprimierung benutzt ein Feld von Zeigern dnptrs auf bereits komprimierte Namen in der aktuellen Nachricht. Der erste Zeiger zeigt auf den Anfang der Nachricht und die Liste endet mit NULL. Die Grenze des Feldes ist angegeben durch lastdnptr. Wenn dnptr NULL ist, dann sind Domainnamen nicht komprimiert. Wenn lastdnptr NULL ist, dann ist die Liste der Namen nicht aktualisiert.
Die Funktion dn_expand() expandiert den komprimierten Domainnamen comp_dn zu einem vollen Domainnamen, welcher in dem Puffer exp_dn der Größe length plaziert ist. Der komprimierte Name ist enthalten in einer Anfrage- oder Antwortnachricht, und msg zeigt auf den Anfang der Nachicht.
Die Resolverroutinen benutzen globale Konfigurations- und Statusinformationen, die in der Struktur _res enthalten sind, welche in <resolv.h> definiert ist. Das einzige Feld, das normalerweise vom Benutzer manipuliert wird, ist _res.options. Dieses Feld kann bitweise oder-Verknüpfungen der folgenden Optionen enthaltenn:
RES_INIT | |
Wahr wenn res_init() aufgerufen wurde. | |
RES_DEBUG | |
Drucke Debugnachrichten. | |
RES_AAONLY | |
Akzeptiere nur authoritative Antworten. res_send() fährt fort bis es eine authoritative Antwort findet, oder gibt einen Fehler zurück. [Noch nicht implementiert.] | |
RES_USEVC | |
Benutze TCP-Verbindungen für Anfragen, nicht UDP-Datagramme. | |
RES_PRIMARY | |
Frage nur primäre Domainnameserver. | |
RES_IGNTC | |
Ignoriere Fehler bei verstümmelten Antworten. Versuche es nicht erneut mit TCP. [Noch nicht implementiert.] | |
RES_RECURSE | |
Setze das Rekursionswunsch-Bit in Anfragen. Rekursion wird von dem Domainnameserver ausgeführt, nicht von res_send(). [Eingeschaltet durch Vorgabe.] | |
RES_DEFNAMES | |
Wenn gesetzt, fügt res_search() den Vorgabedomainnamen an Einzelnamen an, d.h. an solche, die keinen Punkt enthalten. [Eingeschaltet durch Vorgabe.] | |
RES_STAYOPEN | |
Benutzt mit RES_USEVC um die TCP-Verbindung zwischen Anfragen geöffnet zu halten. | |
RES_DNSRCH | |
Wenn gesetzt, sucht res_search() nach Hostnamen in der aktuellen und in übergeordneten Domains. Diese Option wird von gethostbyname(3) benutzt. [Eingeschaltet durch Vorgabe.] | |
Die Funktionen res_query(), res_search(), res_querydomain(), res_mkquery() und res_send() geben die Länge der Antwort zurück, oder -1 wenn ein Fehler auftritt.
Die Funktionen dn_comp() und dn_expand() geben die Länge des komprimierten Namens zurück, oder -1 wenn ein Fehler auftritt.
/etc/resolv.conf | |
Resolverkonfigurationsdatei | |
/etc/host.conf | |
Resolverkonfigurationsdatei | |
10. November 1996 | RESOLVER (3) | BSD |
Hauptindex | Abschnitt 3 | English | 日本語 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.
“ | UNIX has been evolving feverishly for close to 30 years, sort of like bacteria in a cesspool — only not as attractive | ” |
— John Levine, "Unix for Dummies" |