首页 > 编程知识 正文

Binary函数(std::bind绑定成员函数)

时间:2023-05-04 15:09:19 阅读:74781 作者:4317

bind ) )函数说明成功建立套接字文件描述符后,必须通过地址和端口绑定套接字才能执行数据发送和接收操作。

函数原型的bind (函数将长度为addlen的struct sockadd类型的参数my_addr绑定到sockfd,并将sockfd绑定到端口。 使用connect )函数时不需要绑定。 的函数原型如下:

# includesys/types.h # includesys/socket.hint bind (int sockfd,const struct sockaddr *my_addr,socklen _ t adrlen

第一个参数sockfd是由socket ()函数创建的文件描述符。 第二个参数my_addr是指向sockaddr参数结构的指针,其中包括地址、端口和IP地址信息。 执行地址绑定时,必须在绑定结构struct sockaddr中的域(如地址结构中的IP地址、端口和类型)之前设置弦。 这样绑定后,可以将套接字文件描述符与地址等联系起来。 第三个参数addrlen是my_addr结构的长度,可以设置为sizeof(struct sockaddr)。 使用sizeof(struct sockaddr)设置套接字类型及其对的ing结构。

bind ) )函数返回值为0表示绑定成功,-1表示绑定失败,errno错误值如表1所示。 表1 bind的错误值和含义

语义注释EADDRINUSE指定的地址已经在使用EBADFsockfd。 错误的EINVALsockfd已绑定到其他地址。 ENOTSOCKsockfd是文件描述符,不受套接字描述符EACCES地址保护。 用户权限不足EADDRNOTAVAIL接口不存在,或者绑定地址不是本地UNIX协议系列。 AF_UNIXEFAULTmy_addr指针超出用户空间中的UNIX协议系列,AF_UNIXEINVAL地址长度错误,或者套接字为AF_UNIX族UNIX协议缓冲区AF_UNIXELOOP解析my_addr时符号链接过多AF_UNIXENAMETOOLONGmy_addr过长的UNIX协议系列、AF_UNIXENOENT文件中的UNIX协议如果AF_UNIXENOMEN存储器核心小于UNIX协议系列,则AF_UNIXENOTDIR不是目录UNIX协议系列,AF_UNIXEROFSsocket节点位于制度文件系统上在AF_UNIX示例1中,创建UNIX系列流类型的套接字,然后绑定套接字地址和套接字文件描述符。

# definemy _ sock _ path '/some path ' int main (int argc,char *argv[] ) { int sfd; struct sockaddr_un addr; //AF_UNIX对应的结构SFD=socket(af_UNIX,SOCK_STREAM,0 ); 初始化AF_UNIX系列流类型socket if (SFD==-1 )//检查//socketperror是否已成功初始化) ) ); exit(exit_failure; }短信(addr,0,sizeof ) structsockaddr_un ); //将变量addr设置为0 addr.sun_family=AF_UNIX; //协议家族为af_UNIXstrncpy(addr.sun_path,MY_SOCK_PATH,sizeof ) addr.sun_path )-1 ); //将路径复制到地址结构perror(bind ); exit(exit_failure; (//数据发送和接收及处理进程关闭) SFD; //关闭套接字文件描述符}示例2使用结构struct sockaddr_in绑定AF_INET系列流协议,首先是结构struct sockaddr_in的sin _ in

# define my port 3490 int main (int argc,char * argv [ ]; //套接字文件描述符变量struct sockaddr_in my_addr;//以太网套接字地址结构sockfd=socket(af_inet,SOCK_STREAM,0 );//初始化套接字if (sockfd==-1 ) {peeror ) '套接字}; 检查//socketexit(exit_failure )是否已成功初始化} my_addr.sin_family=AF_INET; //地址结构的协议家族my_addr.sin_port=htons(myport ); //地址结构的端口地址,网络字节顺序my _ addr.sin _ addr.s _ addr=inet _ addr (' 192.168.1.150 ' ); //IP,字符串的IP地址为网络的字节序bzero((my_addr.sin_zero ),8 ); 将my_addr.sin_zero设置为0if(bind(sockfd,) ) struct sockaddr * (my _ addr,sizeof ) struct sockaddr * ) (=-1 ) //收发数据并进行数据处理的close(sockfd ); //关闭套接字文件描述符}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。