当前位置: 技术问答>linux和unix
请教高手:关于epoll +线程问题
来源: 互联网 发布时间:2016-10-07
本文导语: 由于刚开始接触epoll,所以请大家不要吝啬口水~~~~~~服务端是个N多客户同时在线,收发数据的,这段时间想把服务端性能提高,以前是阻塞的,占用大,我想改成的效果是:能处理大量并发客户端,非阻塞形式,客户...
由于刚开始接触epoll,所以请大家不要吝啬口水~~~~~~服务端是个N多客户同时在线,收发数据的,这段时间想把服务端性能提高,以前是阻塞的,占用大,我想改成的效果是:能处理大量并发客户端,非阻塞形式,客户端登陆连接后,触发不同的事件:send,recv.
服务端大概结构如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
Client clients;
struct epoll_event ev,events[50];
int epfd, i, curfds;
int ret = 0;
int setnonblocking(int sockfd)
{
if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1)
{
return -1;
}
return 0;
}
void *client_thread(void *pParam)
{
// N多内容要处理
// 处理recv();
// 处理send();
}
int main() {
int listenfd, connectfd, nfds;
struct sockaddr_in serveraddr;
struct sockaddr_in client;
//pthread_t pthread3;
//pthread_create(&pthread3, NULL, System_MT, NULL);
//初始化客户名单
//get_client_list()->Init();
socklen_t addrlen;
int status, a;
pthread_t pthread;
pthread_attr_t attr1; //--modify by HYK
pthread_attr_init(&attr1);
pthread_attr_setstacksize(&attr1, 256 * 1024);
//创建服务器fd
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0))
服务端大概结构如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
Client clients;
struct epoll_event ev,events[50];
int epfd, i, curfds;
int ret = 0;
int setnonblocking(int sockfd)
{
if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0)|O_NONBLOCK) == -1)
{
return -1;
}
return 0;
}
void *client_thread(void *pParam)
{
// N多内容要处理
// 处理recv();
// 处理send();
}
int main() {
int listenfd, connectfd, nfds;
struct sockaddr_in serveraddr;
struct sockaddr_in client;
//pthread_t pthread3;
//pthread_create(&pthread3, NULL, System_MT, NULL);
//初始化客户名单
//get_client_list()->Init();
socklen_t addrlen;
int status, a;
pthread_t pthread;
pthread_attr_t attr1; //--modify by HYK
pthread_attr_init(&attr1);
pthread_attr_setstacksize(&attr1, 256 * 1024);
//创建服务器fd
if ((listenfd = socket(AF_INET, SOCK_STREAM, 0))