listen函数
1.什么是listen函数
典型的服务器程序可以同时服务于多个客户端,如果有大量的客户端发起连接而服务器来不及处理,尚未连接的客户端就处于连接等待状态。listen函数的作用就是设置最多有backlog 个容户端处于连接等待状态,如果接收到更多的连接请求就忽略。
要使用listen函数,需要先包含头文件:
#include <sys/types.h)
#include <sys/socket.h)
2.listen函数的定义
int listen (int sockfd, int backlog);
其中sockfd代表套接字的文件描述符,即socket函数的返回值,详情请看网络通讯基础(5):socket函数-优快云博客;backlog代表等待连接队列的最大长度。它表示在某一时刻,服务器允许同时有最多backlog个客户端排队等待建立3次握手。此函数若成功返回0,失败则返回-1。
3.举例
#include <sys/types.h)
#include <sys/socket.h)
int mian(void){
struct sockaddr_in server_addr;
int sock=socket(AF_INET,SOCK_STREAM,0); #获取套接字的文件描述符
server_addr.sin_family=AF_INET; #使用IPV4协议
server_addr.sin_addr.s_addr=htonl(INADDR_ANY); #定义IP地址,这里不明白请看网络编程基础(3)
server_addr.sin_port=htons (666); #定义端口号
bind(sock,(struct sockaddr *)&server_addr, sizeof(server_addr)); #使用bind函数将套接字绑定到服务器的IP地址和端口号上,(struct sockaddr *)&server_addr这个强制转换不懂得可以看网络编程基础(3)
listen(sock,128); #设置服务器允许同时有最多128个客户端排队等待建立3次握手
}
上面展示的代码就是listen函数的一个简单使用过程,每一个代码段代表的意思都已注释,若有哪里表达的不清楚,欢迎大家提出,最后感谢的观看!