#include <sys/socket.h>
int listen(int s, int backlog);
- listen的第一个参数为待监听的套接字,第二个参数是已连接队列的大小。
listen函数调用后本质会维护两个队列,一个是半连接状态的,一个是已完成连接队列,再unix网络编程中提及listen的第二个参数是维护的两个队列之和,如果你使用man手册查看之后就会有新的认识。
半连接队列的大小通过man手册我们知道可以任意修改,但是是不是通过参数给多少,已完成队列就是多大呢?
答案是:已完成队列的真是大小在centos下是你所给参数的值+1;
## 代码验证
// 服务端
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#define PORT 8080
int main()
{
int listenfd = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(listenfd < 0)
{
perror("socket");
return -1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET