版權所有 © 2014 tutorialspoint
bind - 將名稱繫結到套接字
#include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *my_addr ", socklen_t " addrlen );
bind() 為套接字 sockfd 提供本地地址 my_addr。my_addr 長度為 addrlen 位元組。傳統上,這被稱為\(“為套接字分配名稱”。\(”當使用 socket(2) 建立套接字時,它存在於名稱空間(地址族)中,但沒有分配名稱。
通常需要在 SOCK_STREAM 套接字接收連線之前(參見 accept(2))使用 bind() 分配本地地址。
名稱繫結中使用的規則在不同的地址族之間有所不同。請參閱第 7 節中的手冊條目以獲取詳細資訊。對於 AF_INET,請參閱 ip(7);對於 AF_INET6,請參閱 ipv6(7);對於 AF_UNIX,請參閱 unix(7);對於 AF_APPLETALK,請參閱 ddp(7);對於 AF_PACKET,請參閱 packet(7);對於 AF_X25,請參閱 x25(7);對於 AF_NETLINK,請參閱 netlink(7)。
為 my_addr 引數傳遞的實際結構將取決於地址族。sockaddr 結構定義如下:
struct sockaddr { sa_family_t sa_family; char sa_data[14]; }
此結構的唯一目的是強制轉換 my_addr 中傳遞的結構指標,以避免編譯器警告。以下示例顯示了在 Unix(AF_UNIX)域中繫結套接字時如何執行此操作
#include <sys/socket.h> #include <sys/un.h> #include <stdlib.h> #include <stdlio.h> #define MY_SOCK_PATH "/somepath" int main(int argc, char *argv[]) { int sfd; struct sockaddr_un addr; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) { perror("socket"); exit(EXIT_FAILURE); } memset(&addr, 0, sizeof(struct sockaddr_un)); /* Clear structure */ addr.sun_family = AF_UNIX; strncpy(addr.sun_path, MY_SOCK_PATH, sizeof(addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_un)) == -1) { perror("bind"); exit(EXIT_FAILURE); } ... }
成功時,返回 0。失敗時,返回 -1,並適當地設定 errno。
未描述透明代理選項。
SVr4、4.4BSD(bind() 函式首次出現在 4.2BSD 中)。
bind() 的第三個引數實際上是 int(這是 4.x BSD 和 libc4 和 libc5 所具有的)。一些 POSIX 混淆導致了當前的 socklen_t,glibc 也使用它。另請參閱 accept(2)。
accept (2)
connect (2)
getsockname (2)
listen (2)
path_resolution (2)
socket (2)
廣告