并发服务器 — — I/O复用(select)

select模型的缺点:
1、最大并发数限制。由于一个进程所打开的文件描述符fd有限,有FD_SETSIZE设置,默认最大为1024/2048,因此并发数被限制。(poll中克服了这一问题)
2、效率问题。 每次进行select调用都会采用轮询fd方式(线性扫描全部的fd)。时间复杂度O(n)
3、内核/应用空间内存拷贝。select在解决将fd消息(内核空间)传递给用户空间时采用了内存拷贝方法。

简单通过select函数实现I/O复用完成并发服务器的编写:

功能:将select函数运用在服务器中,实现I/O复用
#include<stdio.h>
#include<string.h>
#include<errno.h>

#include<unistd.h>
#include<sys/times.h>
#include<sys/types.h>
#include<sys/select.h>

#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>

#define PORT 5678
#define IP "10.21.12.13"
int main(int argc,char *argv[])
{
	int sockfd,listenfd;
	int err;
	int client_addrlen,bytes;
	fd_set globe_nfds,current_nfds;
	int nfds,i;
	char buf[128];
	struct sockaddr_in server_addr, client_addr;
	client_addrlen = sizeof(struct sockaddr_in);
	listenfd = socket(AF_INET,SOCK_STREAM,0);
	if(listenfd == -1)
	{
		printf("creat socket error
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值