bindresvport函数用法详解
bindresvport函数简介
- 头文件包含
#include <sys/types.h>
#include <netinet/in.h>
- 函数定义
int bindresvport(int sockfd , struct sockaddr_in * sin );
bindresvport函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘bindresvport’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <sys/types.h>
#include <netinet/in.h>
bindresvport函数详细描述
bindresvport ()用于将文件描述符sockfd引用的套接字绑定到特权匿名IP端口,即从512到1023范围内任意选择的端口号。
如果bindresvport ()执行的bind (2)成功,并且sin不为NULL,那么sin->sin_port返回实际分配的端口号。
sin可以为NULL,在这种情况下sin->sin_family被隐式地取为AF_INET ,但是在这种情况下,bindresvport ()无法返回实际分配的端口号。(以后可以使用getsockname (2))获得此信息。)
bindresvport函数返回值
bindresvport ()成功时返回0;否则,返回-1并设置errno以指示错误的原因。
bindresvport函数错误码
bindresvport ()可能由于与bind (2)相同的任何原因而失败。此外,还可能出现以下错误:
- EACCES调用进程没有特权(在Linux上:调用进程在控制其网络名称空间的用户名称空间中没有 CAP_NET_BIND_SERVICE 功能)。
- EADDRINUSE 所有特权端口都在使用中。
- EAFNOSUPPORT " (" EPFNOSUPPORT " in glibc 27 and earlier)" sin不是NULL,sin->sin_family不是AF_INET
bindresvport函数其他说明
与某些bindresvport ()实现不同,glibc实现忽略调用方在sin->sin_port 中提供的任何值
评论区