多进程服务器中epoll实现

多进程服务器中epoll实现

ID:37718123

大小:18.86 KB

页数:10页

时间:2019-05-29

多进程服务器中epoll实现_第1页
多进程服务器中epoll实现_第2页
多进程服务器中epoll实现_第3页
多进程服务器中epoll实现_第4页
多进程服务器中epoll实现_第5页
资源描述:

《多进程服务器中epoll实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、多进程服务器中,epoll的创建应该在创建子进程之后看我的测试代码,似乎应该是在创建子进程之后创建epoll的fd,否则程序将会有问题,试将代码中两个CreateWorker函数的调用位置分别调用,一个在创建epollfd之前,一个在之后,在调用在创建之前的代码会出问题,在我的机器上(linux内核2.6.26)表现的症状就是所有进程的epoll_wait函数返回0,而客户端似乎被阻塞了:服务器端:#include #include #include #include <

2、netinet/in.h>#include #include #include #include #include #include #include using namespace std;#define MAXLINE 5#define OPEN_MAX 100#define LISTENQ 20#define SERV_PORT 5000#define INFTIM 1000typedef 

3、struct task_t{    int fd;    char buffer[100];    int n;}task_t;int CreateWorker(int nWorker){    if (0 < nWorker)    {        bool bIsChild;        pid_t nPid;        while (!bIsChild)        {            if (0 < nWorker)            {                nPid = ::fork();        

4、        if (nPid > 0)                {                    bIsChild = false;                    --nWorker;                }                else if (0 == nPid)                {                    bIsChild = true;                    printf("create worker %d success!", ::getpi

5、d());                }                else                {                    printf("fork error: %s", ::strerror(errno));                    return -1;                }            }            else             {                int nStatus;                if (-1 == ::wait

6、(&nStatus))                {                    ++nWorker;                }            }        }    }    return 0;}void setnonblocking(int sock){    int opts;    opts=fcntl(sock,F_GETFL);    if(opts<0)    {        perror("fcntl(sock,GETFL)");        exit(1);    }    opts = 

7、opts

8、O_NONBLOCK;    if(fcntl(sock,F_SETFL,opts)<0)    {        perror("fcntl(sock,SETFL,opts)");        exit(1);    }   }int main(){    int i, maxi, listenfd, connfd, sockfd,epfd,nfds;    ssize_t n;    char line[MAXLINE];    socklen_t clilen;    struct epoll_event ev,events[

9、20];    struct sockaddr_in clientaddr;    struct sockaddr_in serveraddr;   

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。