Scroll to navigation

BIND(2) 리눅스 프로그래머 매뉴얼 BIND(2)

이름

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 는 long 형 addrlen 바이트이다. 전통적으로, 이것은 “이름을 소켓에 할당하기” 라고 불리어진다. 소켓이 socket(2)으로 생성되었을때, 그것은 이름 공간(address family)에 존재하지만 할당된 이름을 가지고 있는것은 아니다.

SOCK_STREAM 소켓이 연결들을 받기 전에 bind 를 사용하여 로컬 주소를 할당하는 것이 보통 필수적이다. accept(2)를 참조해라).

주의

이름 묶기시 사용되는 규칙들은 주소 가족(address families)들마다 다르다. 세부 사항을 위해서 Section 7에 있는 메뉴얼을 참조해라. AF_INET 를 위해서는 ip(7)를, AF_UNIX 를 위해서는 unix(7)를, AF_APPLETALK 를 위해서는 ddp(7)를, AF_PACKET 를 위해서는 packet(7)를, AF_X25 를 위해서는 x25(7)를 그리고 AF_NETLINK 를 위해서는 netlink(7)를 참고해라.

반환값

성공시, 0이 반환된다. 에러시, -1이 반환되며, errno 는 적당한 값으로 설정된다.

에러

sockfd 가 유효한 기술자가 아니다.
소켓가 이미 묶여져 있다. 이것은 앞으로 바뀔것이다:세부 사항을 볼려면 linux/unix/sock.c 를 참고해라.
주소가 보호되어 있으며, 사용자는 슈퍼 유저가 아니다.
인자가 소켓이 아니라 파일을 위한 기술자이다.

다음 에러들은 UNIX 도메인 (AF_UNIX)소켓들을 위한 것들이다.:

addrlen 가 잘못되거나, 소켓이 AF_UNIX 가족이 아니다.
소켓 아이노드가 읽기-전용 파일 시스템에 있다.
my_addr 가 사용자가 접근할수 있는 조소 공간외를 가리키고 있다.
my_addr 가 너무 길다.
파일이 존재하지 않는다.
이용할수 있는 커널 메모리가 충분하지 않다.
경로 접두사 요소가 디렉토리가 아니다.
경로 접두사 요소에 대한 검색 허가권이 거부되었다.
너무 많은 상징 연결들을 my_addr시에 만났다.

버그

투명한 프록시 옵션들은 기술되지 않았다.

호환

SVr4, 4.4BSD ( bind 함수는 BSD4.2에서 처음 나타났다.) SVr4는 추가적으로 EADDRNOTAVAIL, EADDRINUSE를,그리고 일반적 에러 조건들인 ENOSR 를, 그리고 Unix-도메인 에러 조건들인 EIO, EISDIR 그리고 EROFS 를 문서화 했다.

주의

bind 의 3번째 인자는 실제로 int이다.(그리고 이것은 BSD 4.* 와 libc4, libc5가 가지고 있는 것이다.) 몇몇 POSIX 들은 현재의 socklen_t 때문에 약간 혼란스럽다. 표준은 아직 채택되지 않았지만, glibc2는 이미 그것을 따르고 있고 또한 socklen_t를 가지고 있다. accept(2)를 참고해라.

관련 항목

accept(2), connect(2), listen(2), socket(2), getsockname(2), ip(7), socket(7)

역자

정강훈 <skyeyes@soback.kornet.net>, 2000년 7월 2일

1998년 10월 3일 Linux 2.2