一般网站建设多少钱便宜的网站好吗郑州做网站哪家好
一、监听队列链接上限测试
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.h>int 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.h>int 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个文件描述符。系统对其进行限制,可以进行更改