Bindesubroutine
Zweck
Bindet einen Namen an einen Socket.
Bibliothek
Standard-C-Bibliothek (libc.a)
Syntax
#include <sys/socket.h>
Beschreibung
Die Subroutine Binden ordnet einem nicht benannten Socket einen Parameter Name zu. Sockets, die von der Subroutine Socket erstellt werden, sind nicht benannt. Sie werden nur durch ihre Adressfamilie identifiziert. Subroutinen, die Sockets verbinden, weisen entweder Namen zu oder verwenden nicht benannte Sockets.
Bei einem UNIX-Domain-Socket ist ein connect-Aufruf nur dann erfolgreich, wenn der Prozess, der connect aufruft, Lese- und Schreibrechte für die durch den bind-Aufruf erstellte Socket-Datei hat. Berechtigungen werden durch den umfragen -Wert des Prozesses bestimmt, der die Datei erstellt hat.
Ein Anwendungsprogramm kann den zugeordneten Socketnamen mit der Subroutine 'getsockname' abrufen.
Die Socketanwendungen können mit COMPAT_43 -Definition kompiliert werden. Dadurch ist die sockaddr -Struktur BSD 4.3 kompatibel. Weitere Informationen finden Sie in der Datei socket.h .
Durch das Binden eines Namens in der Domäne UNIX wird ein Socket im Dateisystem erstellt, der vom Aufrufenden gelöscht werden muss, wenn er nicht mehr benötigt wird.
Parameter
| Element | Beschreibung |
|---|---|
| Socket | Gibt den Socketdeskriptor (eine ganze Zahl) des zu bindenden Sockets an. |
| Name | Verweist auf eine Adressstruktur, die die Adresse angibt, an die der Socket gebunden werden soll Die Datei /usr/include/sys/socket.h definiert die Adressstruktur sockaddr . Die Struktur Sockadr enthält eine Kennung, die für das Adressformat und das Protokoll spezifisch ist, die in der Subroutine Socket bereitgestellt werden. |
| NameLength | Gibt die Länge der Socket-Adressstruktur an. |
Rückgabewerte
Nach erfolgreicher Beendigung gibt die Subroutine Binden den Wert 0 zurück.
Wenn die Subroutine Binden nicht erfolgreich ist, führt der Subroutinenhandler die folgenden Aktionen aus:
- Gibt einen Wert von -1 an das aufrufende Programm zurück.
- Verschiebt einen Fehlercode, der den spezifischen Fehler angibt, in die globale Variable Fehlernummer . Weitere Erläuterungen zur Variablen Fehlernummer finden Sie unter "Error Notification Object Class" in Konzepte Der Kommunikationsprogrammierung.
Fehlercodes
Die Subroutine Binden ist nicht erfolgreich, wenn einer der folgenden Fehler auftritt:
| Wert | Beschreibung |
|---|---|
| EACCES | Die angeforderte Adresse ist geschützt und der aktuelle Benutzer hat keine Zugriffsberechtigung. |
| EADDRINUSE | Die angegebene Adresse wird bereits verwendet. |
| EADDRNOTAVAIL | Die angegebene Adresse ist auf der lokalen Maschine nicht verfügbar. |
| EAFNOUNTERSTÜTZUNG | Die angegebene Adresse ist keine gültige Adresse für die Adressfamilie des angegebenen Sockets. |
| EAGAIN | Die transienten Ports sind bereits belegt und nicht verfügbar. |
| EBADF | Der Parameter Socket ist ungültig. |
| EDESTADDRREQ | Das Argument Adresse ist ein Nullzeiger. |
| EFAULT | Der Parameter Adresse befindet sich nicht in einem beschreibbaren Teil des UserAddress . |
| EINVAL | Der Socket ist bereits an eine Adresse gebunden. |
| ENOBUF | Nicht genügend Pufferspeicher verfügbar. |
| ENODEV | Die angegebene Einheit ist nicht vorhanden. |
| ENOTSOCK (ENOTSOCK) | Der Parameter Socket verweist auf eine Datei, nicht auf einen Socket. |
| EOPNOTSUPP | Das Socket, auf das der Parameter Socket verweist, unterstützt keine Adressbindung. |
Beispiele
Das folgende Programmfragment veranschaulicht die Verwendung der Subroutine Binden zum Binden des Namens "/tmp/zan/" zu einem UNIX -Domänensocket.
#include <sys/un.h> .
.
.
struct sockaddr_un addr;
.
.
.
strcpy(addr.sun_path, "/tmp/zan/");
addr.sun_len = strlen(addr.sun_path);
addr.sun_family = AF_UNIX;
bind(s,(struct sockaddr*)&addr, SUN_LEN(&addr));