BIND(2)

명칭
bind - assign a local protocol address to a socket

프로그램 라이브러리
libc

서식
<sys/types.h> <sys/socket.h> int bind(int s, const struct sockaddr *addr, socklen_t addrlen)

해설
bind() (은)는, 로컬 프로토콜 주소를 소켓에 할당합니다. 소켓은, socket(2) 그리고 작성될 때에 주소 패밀리 공간에 존재합니다만, 프로토콜 주소는 할당할 수 있고 있지 않습니다. bind() (은)는 소켓에 addr (을)를 할당하는 것을 요구합니다.

주
UNIX 도메인내에서의 주소의 바인드에 의해 파일 시스템내에 소켓이 작성됩니다. 이것은, 필요없게 되었을 때에 호출측이 (unlink(2) (을)를 사용해) 삭제할 필요가 있습니다.

주소의 바인드로 사용되는 규칙은 통신 도메인간에 다릅니다. 상세한 것에 대하여는, 섹션 4 의 메뉴얼 엔트리를 참조해 주세요.

이식성을 최대로 하기 위해서(때문에)는, 소켓 구조체는, 사용전 즉 이것을 bind() 에 건네주기 전에, 0 으로 묻어야 합니다.

반환값

에러
bind() 호출은 다음의 경우에 실패합니다.

[EAGAIN]
    요구를 채우기 위한 커널 리소스를 일시적으로 이용할 수 없습니다.

[EBADF]
    s 하지만 유효한 기술자가 아닙니다.

[ENOTSOCK]
    s 하지만 소켓이 아닙니다.

[EADDRNOTAVAIL]
    지정의 주소가 로컬 머신으로부터 이용할 수 없습니다.

[EADDRINUSE]
    지정의 주소는 이미 사용중입니다.

[EACCES]
    요구된 주소는 보호되고 있어 현재의 유저가 가지고 있는 퍼미션은 거기에 액세스 하는데는 부적절합니다.

[EFAULT]
    addr 파라미터가 유효한 유저 address 공간이 아닙니다.

다음의 에러는 UNIX 도메인내의 바인드아드레스에 고유의 것입니다.

[ENOTDIR]
    패스의 원가요소중에 디렉토리 이외의 것이 포함되어 있습니다.

[ENAMETOOLONG]
    패스명의 원가요소가 255 캐릭터를 넘고 있는지, 또는 패스명 전체가 1023 캐릭터를 넘고 있습니다.

[ENOENT]
    패스명의 접두사 원가요소가 존재하지 않습니다.

[ELOOP]
    패스명을 변환할 경우에 검출된 기호 연결이 너무 많습니다.

[EIO]
    디렉토리 엔트리를 작성한 동안, 또는 inode 를 할당해 하고 있는 동안에 입출력 에러가 발생했습니다.

[EROFS]
    지정된 파일은 읽기 전용 파일 시스템상에 있습니다.

[EISDIR]
    하늘의 패스명이 지정되었습니다.

관련 항목
connect(2), getsockname(2), listen(2), socket(2)

역사
bind() 함수는 4.2BSD 그리고 등장했습니다.