C standard library :: socket
bind - bind et navn til en socket
int bind (int fd, const struct sockaddr addr, socklen_t len)
Denne funktion skal tildele en lokal socket-adresse addr til en socket fd. Socket kreeret med socket() er fra starten unavngiven; de er identificeret kun gennem deres adresse-familie.
Funktionen bind() tager følgende parametre:
- fd
- Angiver den file descriptor (socket) der skal bindes
- addr
- Peger til en sockaddr struktur indeholende adressen der skal bindes til socket. Længden og formatet af adressen afhænger af adresse-familien på socket.
- len
- Specificerer længden af sockaddr strukturen til addr.
Socket specificeret ved fd kan kræve at processen har nødvendige rettigheder for at bruge bind().
Returværdi
Ved succesfuld udførelse returneres 0. Ellers -1 og errno sat til at indikere årsag.
Fejl
Funktionen bind() skal fejle hvis:
- [EADDRINUSE]
- Den angivne adresse er allerede i brug.
- [EADDRNOTAVAIL]
- Den angive adresse er ikke tilgængelig fra den lokale maskine.
- [EAFNOSUPPORT]
- Den angive adresse er ikke en valid adresse for adresse-familien på den specificere socket.
- [EBADF]
- Parameteren fd er ikke en valid file descriptor.
- [EINVAL]
- Socket er allerede bundet til en adresse og protokollen supporterer ikke binding til en ny, eller socket er blevet lukket ned.
- [ENOTSOCK]
- Parameter fd refererer ikke til en socket.
- [EOPNOTSUPP]
- Socket protokollen supporterer ikke binding til en adresse.
Hvis adresse-familien på socket er AF_UNIX, skal bind() fejle hvis:
- [EACCES]
- En komponent af sti-prefix nægter søgerettigheder, eller forespurgte navn kræver skrive-rettigheder til en mappe hvor der afvises skrive-rettigheder.
- [EDESTADDRREQ] eller [EISDIR]
- Parameter addr er en nul-peger .
- [EIO]
- En I/O fejl opstod.
- [ELOOP]
- Ved undersøgelse af stinavne i addr forekom en løkke i symbolic links.
- [ENAMETOOLONG]
- En komponent i stinavnet oversteg NAME_MAX tegn, eller hele stinavnet oversteg PATH_MAX tegn.
- [ENOENT]
- En komponent i stinavnet har ikke navnet på en eksisterende fil eller stinavnet er en tom streng.
- [ENOTDIR]
- En komponent i sti-prefix i stinavnet i addr er ikke en mappe .
- [EROFS]
- Navnet ligger på en read-only filsystem.
Funktionen bind() kan fejle hvis:
- [EACCES]
- Den angivne adresse er beskyttet og den aktuelle bruger har ikke rettigheder til at binde til den.
- [EINVAL]
- Parameteren len er ikke en valid længde for adresse-familien.
- [EISCONN]
- Socket er allerede forbundet.
- [ELOOP]
- Flere end SYMLOOP_MAX symbolic links optrådte i stinavne i addr.
- [ENAMETOOLONG]
- Stinavnet indgik i en symbolic link som gav en resultat der oversteg PATH_MAX.
- [ENOBUFS]
- Utilstrækkelige ressourcer til gennemførelsen af kaldet.