Linux tcp同时多个连接,我的linux tcp server最多只能同时进行10个TCP请求,其余的都在等待了,如何让所有的连接都同时进行?...

一个问题, 我的linux Server 最多只同时接收10个tcp请求, 其余的都在等待了。请问是什么原因如何修改。

每次到来一个请求,我都新建一个子进程处理流程。

if((sockfd=socket(AF_INET,SOCK_STREAM,ZERO))==-1)//建立一个套接字描述符。

{

exit(1);

}

/* 服务器端填充 sockaddr_in结构 */

bzero(&server_addr,sizeof(struct sockaddr_in));

server_addr.sin_family=AF_INET;

server_addr.sin_addr.s_addr=htonl(INADDR_ANY); /*IP地址转换为网络字节序*/

server_addr.sin_port=htons(portnumber); /*端口号转换为网络字节序*/

/* 捆绑sockfd描述符 */

if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

{

printf("Bind error:%sna",strerror(errno));

exit(1);

}

/* 监听sockfd描述符 */

if(listen(sockfd,500)==-1) /*5为请求队列的最大请求数*/

{

printf("Listen error:%sna",5(errno));

exit(1);

}

printf("socket is %dn", sockfd);//打印套接字句柄。

signal(SIGCHLD , sig_chld );//杀死子进程中的僵尸进程。

/*

if(fork() == 0)//新建一个子进程,用于操作串口,读取通信模块所收到的短信。

{

//tGuard();//串口监控进程,不会返回,一直监控。若有CQT模块报警,那么就通过其中的函数完成相应的工作。

exit(0);

}

*/

for(;;  )// 服务器不断的监听。

{//阻塞 ,直到一个连接连接过来。

new_fd = accept(sockfd , (struct sockaddr *)(&client_addr),&sin_size);

if((pid=fork())==ZERO)

很费解的是最多10个连接,请问是内核设定的么?

|

尝试修改/proc/sys/net/core/somaxconn的值看看!

try:

echo 1024 > /proc/sys/net/core/somaxconn !

good luck!

|

楼主现在贴出来的这部分代码不会影响到楼主说的那个问题

if(listen(sockfd,500)==-1)

操作系统默认的128,大于128的,默认用128;

这里的意思也不是最大请求数;这里设置的值的作用是,同一个时刻,同时挂载上来的用户请求,操作系统只接受128个,再多的,就会超时3秒

一般是具有非常大的并发请求才需要调高这个值,像楼主的这个问题,你这里写个5,都能满足你的要求

应该是别的地方的问题,需要别人帮忙的话,请把详细的代码贴一下

|

自己在虚拟机上测试吧,呵呵。正好可以定位下到底是环境/权限/资源问题还是代码问题。

backlog  最大128, 楼主设500,也没有问题

如果怀疑是另一个SERVER, 而且另一个SERVER采用并发技术 而不是多路复用的话,

是否可以 ps -ef|grep 进程名   看看他到底起了多少个进程。(俺不知道咋看并发连接数,只能这么看了)

|

汗,不好意思,看错了。500不是端口。。是最大连接数。

|

你把进程换成线程试试,也许是资源消耗太多了

|

俺建议改成IO多路复用select方式实现。

|

这是不是 你对每个进程所能拥有的最大数目子进程进行了设置

要不就听楼上的改成 select吧 资源还能省下不少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值