bind -
將一個名字和一個套接字繫結到一起(賦一個名字給一個套接字)
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *my_addr,
socklen_t addrlen);
bind 為套接字
sockfd
指定本地地址
my_addr.
my_addr 的長度為
addrlen
(位元組).傳統的叫法是給一個套接字分配一個名字.
當使用
socket(2),
函式建立一個套接字時,它存在於一個地址空間(地址族),
但還沒有給它分配一個名字
一般來說在使用
SOCK_STREAM
套接字建立連線之前總要使用
bind
為其分配一個本地地址.參見
accept(2)).
這條規則用於給每個地址族繫結不同的名稱.更多細節請參
考手冊頁第7冊(man7). 對於
AF_INET 參見
ip(7), 對於
AF_UNIX
參見
unix(7), 對於
AF_APPLETALK
參見
ddp(7), 對於
AF_PACKET
參見
packet(7), 對於r
AF_X25
參見
x25(7) 對於
AF_NETLINK
參見
netlink(7).
函式執行成功返回0,否則返回-1,
並設定錯誤程式碼.
- EBADF
-
sockfd
不是一個合法套接字描述符.
- EINVAL
- 套接字已經繫結到一個地址.這一條在以後會有所改變:
具體參見 linux/unix/sock.c
- EACCES
- 地址受保護,使用者不是系統管理員.
- ENOTSOCK
- 引數是檔案描述符,不是一個套接字.
下列錯誤適用於UNIX域
(
AF_UNIX) 套接字.
- EINVAL
- 地址長度 addrlen
錯誤,或者套接字不在
AF_UNIX 族.
- EROFS
- 套接位元組點位於只讀檔案系統.
- EFAULT
-
my_addr
指向使用者無權訪問的地址空間.
- ENAMETOOLONG
-
my_addr
長度超範圍.
- ENOENT
- 檔案不存在.
- ENOMEM
- 核心儲存空間不足.
- ENOTDIR
- 指定路徑不是一個目錄.
- EACCES
- 指定路徑拒絕訪問.
- ELOOP
- 在解析 my_addr
時發現過多符號連線.
透明代理選項沒有描述.
SVr4,4.4BSD(函式
bind
首次出現於BSD
4.2)SVr4文件增加了
EADDRNOTAVAIL,
EADDRINUSE, 和
ENOSR
一般性錯誤, 還增加了
EIO,
EISDIR 和
EROFS Unix域錯誤.
函式
bind
的第三個引數實際上是int型別(BSD
4.*和libc4以及libc5都是這麼做的).
不知為什麼有的POSIX系統目前仍在使用socklen_t.
目前尚無統一標準,不過glibc2兩者都使用.參見
accept(2).
accept(2),
connect(2),
listen(2),
socket(2),
getsockname(2),
ip(7),
socket(7)
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh