BINDRESVPORT(3)

명칭
bindresvport, bindresvport_sa - 특권 IP 포트에 소켓을 바인드 한다

서식
<rpc/rpc.h> int bindresvport(int sd, struct sockaddr_in *sin) int bindresvport_sa(int sd, struct sockaddr *sa)

해설
bindresvport (와)과 bindresvport_sa (은)는, 소켓 기술자를, 특권 IP 포트, 즉 범위 0 ~ 1023 의 포토에 결합하기 위해서 사용됩니다.

root 만이 특권 포트에 결합할 수 있습니다. 이 호출은 다른 유저에 대해서는 처리 실패합니다.

sin 하지만 누르포인타가 아닌 경우, sin->sin_family 하 sd 에 의해 건네받는 소켓의 주소 패밀리로 초기화한다 필요가 있습니다. sin->sin_port 의 값이 0 이 아닌 경우, bindresvport() (은)는, 지정한 포트를 사용하려고 합니다. 거기에 실패하면(자), 다른 특권 첨부 포트를 자동적으로 선택합니다.

sin 에 누르포인타를 건네주는 것은 정당합니다. 이 경우, 호출측은 bindresvport() 하지만 주운 포트 번호를 얻을 수 없습니다.

bindresvport() 의 함수 prototype는, AF_INET 소켓에 특화하고 있습니다. bindresvport_sa() (은)는, 보다 중립적인 함수 prototype를 가집니다만, 정확하게 똑같이 동작합니다. 양쪽 모두의 함수라고도 정확하게 같은 거동을 나타내는 것으로, 양쪽 모두 AF_INET 소켓과 같게, AF_INET6 소켓을 서포트하는 것에 주의해 주세요.

반환값
bindresvport() (와)과 bindresvport_sa() (은)는, 처리가 성공하면(자) 값 0 을 돌려줍니다. 그렇지 않은 경우는 -1 이 돌려주어 에러를 나타내기 위해서(때문에) errno 하지만 설정됩니다.

에러
bindresvport() (와)과 bindresvport_sa() 함수는 다음의 경우에 실패합니다.

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

[ENOTSOCK]
    sd (은)는 소켓이 아닙니다.

[EADDRNOTAVAIL]
    지정된 주소는 이 로컬 머신으로부터 이용 가능하지는 않습니다.

[EADDRINUSE]
    지정된 주소는 벌써 사용중입니다.

[EINVAL]
    소켓은 벌써 있는 주소에 바인드 되고 있습니다, 또는, 소켓 패밀리와 지정된 주소의 패밀리가 일치하지 않습니다.

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

[EFAULT]
    name 파라미터는, 유저 address 공간의 정당한 부분에 존재하지 않습니다.

[ENOBUFS]
    시스템에는, 이 조작을 실행하기 위해서 충분한 자원이 없습니다.

[EPFNOSUPPORT]
    시스템에 프로토콜 패밀리가 설정되어 있지 않은지, 프로토콜 패밀리에 대한 실장이 존재하지 않는지, 인수의 사이에 주소 패밀리가 일치하지 않습니다.

관련 항목
bind(2), socket(2), rresvport(3), rresvport_af(3)