/*
1、select实现并发服务器并发的两点限制
一、一个进可以打开的最大文件描述符限制。能够经过两种方式修改
ulimit -n :获取最大文件描述符个数
ulimit -n 2048:修改成2048个
另外能够经过如下程序修改,利用 setrlimit 不能改父进程的限制,只能改当前进程和子进程可以打开的最大文件描述符限制
int getrlimit(int resource, struct rlimit *rlim); //获取系统资源限制 要获取的资源为RLIMIT_NOFILE
int setrlimit(int resource, const struct rlimit *rlim);
服务器
struct rlimit {
rlim_t rlim_cur; // Soft limit
rlim_t rlim_max; //Hard limit (ceiling for rlim_cur)
};
二、select中的fd_set集合容量的限制(FD_SETSIZE),修改宏的值,这须要从新编译内核
*/并发
#include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<stdlib.h> #include<stdio.h> #include<errno.h> #include<netinet/in.h> #include<arpa/inet.h> #include<signal.h> #include <sys/time.h> #include <sys/resource.h> #define ERR_EXIT(m)\ do\ {\ perror(m);\ exit(EXIT_FAILURE);\ }while(0) int main(void) { struct rlimit rl; if(getrlimit(RLIMIT_NOFILE,&rl)<0) ERR_EXIT("getrlimit"); printf("%d\n",(int)rl.rlim_max); rl.rlim_cur=2048; rl.rlim_max=2048; if(setrlimit(RLIMIT_NOFILE,&rl)<0) ERR_EXIT("setrlimit"); if(getrlimit(RLIMIT_NOFILE,&rl)<0) ERR_EXIT("getrlimit"); printf("%d\n",(int)rl.rlim_max); return 0; }