当前位置: 技术问答>linux和unix
有没有EPOLL的例子学习一下?
来源: 互联网 发布时间:2015-12-21
本文导语: 我在网上找了个,但很容易出问题,请问有没有更好的?谢谢。 | 我这里有一个 ,贴出来大家学习一下. 运行这个程序需要预先设置栈内存和文件描述符上限, 否则运行失败 ulimit -n 16384 ulim...
我在网上找了个,但很容易出问题,请问有没有更好的?谢谢。
|
我这里有一个 ,贴出来大家学习一下.
运行这个程序需要预先设置栈内存和文件描述符上限, 否则运行失败
ulimit -n 16384
ulimit -s 4096
文件名:server.c
编译: gcc server.c -Wall -O2 -pthread -o server
程序源码如下(请自行编辑宏定义SERVER_IP为自己的IP):
/*Linux 2.6 x86_64 only*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define THREAD_MAX 4096
#define LISTEN_MAX 5000
#define SERVER_IP "192.168.1.103"
typedef struct
{
char ip4[128];
int port;
int fd;
} LISTEN_INFO;
//服务器参数
static LISTEN_INFO s_listens[LISTEN_MAX];
//线程池参数
static unsigned int s_thread_para[THREAD_MAX][8];//线程参数
static pthread_t s_tid[THREAD_MAX];//线程ID
pthread_mutex_t s_mutex[THREAD_MAX];//线程锁
//私有函数
static int init_thread_pool(void);
static int init_listen4(char *ip4, int port, int max_link);
//线程函数
void * test_server4(unsigned int thread_para[]);
int main(int argc, char *argv[])//客户端驱动
{
int i, j, rc;
int sock_listen; //监听套接字
int sock_cli; //客户端连接
int listen_index;
int epfd;
int nfds;
struct epoll_event ev;
struct epoll_event events[LISTEN_MAX];
socklen_t addrlen; //地址信息长度
struct sockaddr_in addr4; //IPv4地址结构
//线程池初始化
rc = init_thread_pool();
if (0 != rc)
exit(-1);
//初始化服务监听
for(i = 0; i rc)
{
fprintf(stderr, "无法创建服务器监听于%s:%drn", s_listens[i].ip4, s_listens[i].port);
exit(-1);
}
s_listens[i].fd = rc;
}
//设置集合
epfd = epoll_create(8192);
for (i = 0; i
运行这个程序需要预先设置栈内存和文件描述符上限, 否则运行失败
ulimit -n 16384
ulimit -s 4096
文件名:server.c
编译: gcc server.c -Wall -O2 -pthread -o server
程序源码如下(请自行编辑宏定义SERVER_IP为自己的IP):
/*Linux 2.6 x86_64 only*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define THREAD_MAX 4096
#define LISTEN_MAX 5000
#define SERVER_IP "192.168.1.103"
typedef struct
{
char ip4[128];
int port;
int fd;
} LISTEN_INFO;
//服务器参数
static LISTEN_INFO s_listens[LISTEN_MAX];
//线程池参数
static unsigned int s_thread_para[THREAD_MAX][8];//线程参数
static pthread_t s_tid[THREAD_MAX];//线程ID
pthread_mutex_t s_mutex[THREAD_MAX];//线程锁
//私有函数
static int init_thread_pool(void);
static int init_listen4(char *ip4, int port, int max_link);
//线程函数
void * test_server4(unsigned int thread_para[]);
int main(int argc, char *argv[])//客户端驱动
{
int i, j, rc;
int sock_listen; //监听套接字
int sock_cli; //客户端连接
int listen_index;
int epfd;
int nfds;
struct epoll_event ev;
struct epoll_event events[LISTEN_MAX];
socklen_t addrlen; //地址信息长度
struct sockaddr_in addr4; //IPv4地址结构
//线程池初始化
rc = init_thread_pool();
if (0 != rc)
exit(-1);
//初始化服务监听
for(i = 0; i rc)
{
fprintf(stderr, "无法创建服务器监听于%s:%drn", s_listens[i].ip4, s_listens[i].port);
exit(-1);
}
s_listens[i].fd = rc;
}
//设置集合
epfd = epoll_create(8192);
for (i = 0; i