南京高端网站建设公司,仿站是什么,做章的网站,周口专业做网站公司一、监听队列链接上限测试
1、res listen(sockfd,5); //创建监听队列res listen(sockfd,5);不懂版本有不同的限制#xff0c;2.6早期版本有限制为128#xff0c;超过默认为128#xff0c;可使用uname -a 查看版本
2、测试将链接数到达上限#xff0c;
方法#xff1…一、监听队列链接上限测试
1、res listen(sockfd,5); //创建监听队列res listen(sockfd,5);不懂版本有不同的限制2.6早期版本有限制为128超过默认为128可使用uname -a 查看版本
2、测试将链接数到达上限
方法限制其accept只让其去链接观察最后链接了多少个。
运行结果
发现有6个链接有一个未完成三次握手只发送了链接信息但服务器端没有回复信息导致客户端阻塞延迟多发多次尝试当connect超时后会自动退出。
3、res listen(sockfd,3000); for( int i 0; i 4000; i)
运行结果
发现只能链接1021个相比较于1024少了3个 0 1 2 --》标准输入、标准输出、标准错误输出
4、使用netstat -natp 命令观察系统默认大小 5、利用 ulimit -n 命令调整
ulimit 用来限制每个用户可使用的资源如CPU、内存、句柄等。
用法:ulimit [-SHacdefilmnpqrstuvx] [限制]
S表示软限制,超出设定的值会告警。 H 表示硬限制超出设定的值会报错。 a 列出系统所有资源限制的值 c当某些程序发生错误时系统可能会将该程序在内存中的信息写成文件(除错用)这种文 件就被称为核心文件(core file)。此为限制每个核心文件的最大容量 d每个进程数据段的最大值 f当前shell可创建的最大文件容量 l可以锁定的物理内存的最大值 m可以使用的常驻内存的最大值 n每个进程可以同时打开的最大文件句柄数 p管道的最大值 s堆栈的最大值 t每个进程可以使用CPU的最大时间 u每个用户运行的最大进程并发数 v当前shell可使用的最大虚拟内存
ulimit -a
ulimit -n //只显示能打开的文件最大值
ulimit -n 4096 //将文件链接大小改为4096这里只是进行连接并不进行数据传输当前系统可以实现。 6、测试代码
test_cli.c 客户端代码
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h#include sys/socket.h
#include netinet/in.h
#include arpa/inet.hint main()
{//指定服务器的ip和端口struct sockaddr_in saddr;//定义一个套接字的地址代表服务器的地址memset(saddr,0,sizeof(saddr));saddr.sin_family AF_INET;saddr.sin_port htons(6000);//6000代表服务器的端口系统随机分配自身的端口 1024以内属于知名端口例如短号110等只有管理员用户可使用 4096以内为保留端口 一般使用都锁使用4096以上saddr.sin_addr.s_addr inet_addr(127.0.0.1);//循环创建套接字区connect链接for( int i 0; i 100; i){int sockfd socket(AF_INET,SOCK_STREAM,0);if( sockfd -1)//创建套接字失败{printf(creat socket failed\n);break;}int res connect(sockfd,(struct sockaddr*)saddr,sizeof(saddr));if( res -1){break;}printf( i %d\n,i);}
}test_ser.c 服务器端
#include stdio.h
#include stdlib.h
#include unistd.h
#include string.h#include sys/socket.h
#include netinet/in.h
#include arpa/inet.hint socket_init();int main()
{int sockfd socket_init();if( sockfd -1){exit(0);}//实现死循环让程序一直运行while( 1 ){sleep(1);}}
int socket_init()
{//创建一个在传输层使用tcp协议的一个套接字int sockfd socket(AF_INET,SOCK_STREAM,0); //AF_INET --地址zhu目前的固定的、服务类型 ---- tcp流式服务if(sockfd -1)//创建失败{return -1;}//定义一个套接字地址一个ipv4 专用的地址struct sockaddr_in saddr;memset(saddr,0,sizeof(saddr));saddr.sin_family AF_INET;saddr.sin_port htons(6000);//网络字节 大端saddr.sin_addr.s_addr inet_addr(127.0.0.1);//将字符串转成无符号整形//指定ip端口int res bind(sockfd,(struct sockaddr*)saddr,sizeof(saddr));if( res -1){printf(bind err\n);return -1;}//创建监听队列res listen(sockfd,5);if( res -1){return -1;}return sockfd;}命令 uname -a 查看版本 命令 ulimit -a 显示系统中的一些限制
每次创建套接字即一个文件描述符一个进程最多能打开多少文件描述符文件表的大小 可以看出该程序只能打开1024个文件只能得到1024个文件描述符。系统对其进行限制可以进行更改