bind(2) System Calls Manual bind(2) bind - (libc -lc) #include int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); socket(2) ( ) . bind() addr sockfd. addrlen addr. " ". bind() SOCK_STREAM ( accept(2)). . 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). addr . sockaddr : struct sockaddr { sa_family_t sa_family; char sa_data[14]; } addr . . . -1 errno . EACCES . EADDRINUSE . EADDRINUSE ( ) . /proc/sys/net/ipv4/ip_local_port_range ip(7). EBADF sockfd . EINVAL . EINVAL addrlen addr . ENOTSOCK sockfd . EADDRNOTAVAIL . UNIX (AF_UNIX): EACCES . ( path_resolution(7).) EFAULT addr . ELOOP addr. ENAMETOOLONG addr . ENOENT . ENOMEM . ENOTDIR . EROFS . . addr.sun_path null AF_UNIX. POSIX.1-2024. POSIX.1-2001 SVr4 4.2BSD. . bind() getaddrinfo(3). UNIX (AF_UNIX) : #include #include #include #include #include #include #define MY_SOCK_PATH "/somepath" #define LISTEN_BACKLOG 50 int main(void) { int sfd, cfd; socklen_t peer_addr_size; struct sockaddr_un my_addr, peer_addr; sfd = socket(AF_UNIX, SOCK_STREAM, 0); if (sfd == -1) err(EXIT_FAILURE, "socket"); memset(&my_addr, 0, sizeof(my_addr)); my_addr.sun_family = AF_UNIX; strncpy(my_addr.sun_path, MY_SOCK_PATH, sizeof(my_addr.sun_path) - 1); if (bind(sfd, (struct sockaddr *) &my_addr, sizeof(my_addr)) == -1) err(EXIT_FAILURE, "bind"); if (listen(sfd, LISTEN_BACKLOG) == -1) err(EXIT_FAILURE, "listen"); /* accept(2). */ peer_addr_size = sizeof(peer_addr); cfd = accept(sfd, (struct sockaddr *) &peer_addr, &peer_addr_size); if (cfd == -1) err(EXIT_FAILURE, "accept"); /* () ... */ if (close(sfd) == -1) err(EXIT_FAILURE, "close"); if (unlink(MY_SOCK_PATH) == -1) err(EXIT_FAILURE, "unlink"); } accept(2), connect(2), getsockname(2), listen(2), socket(2), getaddrinfo(3), getifaddrs(3), ip(7), ipv6(7), path_resolution(7), socket(7), unix(7) 3 . . : . 6.18 8 2026 bind(2)