2022-05-02-Linux C 中bind函数用法及注意事项
2022/5/2 7:13:45
本文主要是介绍2022-05-02-Linux C 中bind函数用法及注意事项,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux C 中bind函数用法详细介绍及注意事项:
对于 C/S 通信模型中
client 端使用的函数顺序通常是 : socket -> connect -> send/recv
server 端使用的函数顺序通常是 : socket -> bind -> listen -> send/recv
#include <sys/types.h>
#include <sys/socket.h>
int bind(int sockfd, const struct sockaddr * addr, socklen_t addrlen);
bind()函数用于服务器端,服务器的网络地址和端口号通常固定不变,客户端得知服务器的地址和端口号以后,可以主动向服务器请求连接。因此服务器需要调用bind()绑定地址。
sockfd表示socket文件的文件描述符,一般为socket函数的返回值;
addr表示服务器的通信地址,本质为struct sockaddr 结构体类型指针,struct sockaddr结构体定义如下
struct sockaddr{
sa_family_t sa_family;
char sa_data[14];
};
结构体中的成员,sa_data[]表示进程IP地址;
bind函数中的第三个参数addrlen表示参数addr的长度;addr参数可以接受多种类型的结构体,而这些结构体的长度各不相同,因此需要使用addrlen参数额外指定结构体长度;
可以使用下列语句,定义一个struct sockaddr_in类型的结构体
struct sockaddr_in servaddr;//结构体定义
bzero(&servaddr,sizeof(servaddr));//结构体清零
servaddr.sin_family=AF_INET;//设置地址类型为AF_INET
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);//设置网络地址为INADDR_ANY
servaddr.sin_port=htons(80);//设置端口为80
bind(fd, (sockaddr *)(&servaddr), sizeof(servaddr));
如果一个应用并不关心分配给它的地址,则可将Internet地址设置为INADDR_ANY,或将端口号置为0。如果Internet地址段为INADDR_ANY,则可使用任意网络接口。
bind函数调用成功返回0,否则返回-1,并设置errno;
EACCES:地址受到保护,用户非超级用户。
EADDRINUSE:指定的地址已经在使用。
EBADF:sockfd参数为非法的文件描述符。
bind属性设置
默认情况下,一个端口是不允许重复绑定的。
linux中socket可以通过以下设置来允许端口重复绑定:
unsigned int yes = 1;
setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))
如果ClientA先bind 端口C, ClientB再bind 端口C, 那么发往端口C的数据只有ClientB才能收到。
查看端口绑定命令
linux 命令: netstat -anu
if((sockfd=socket(AF_INET,SOCK_DGRAM,0)==-1)) 总是运行报错。
同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
谢谢大佬,errno 88,搞定了,套接字创建那里括号放错位置导致优先级有问题,搞定了。
这篇关于2022-05-02-Linux C 中bind函数用法及注意事项的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法