Chinaunix首页 | 论坛 | 博客

SJC

  • 博客访问: 3731
  • 博文数量: 7
  • 博客积分: 125
  • 博客等级: 入伍新兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-14 21:16
文章分类

全部博文(7)

文章存档

2011年(7)

我的朋友
最近访客

分类: LINUX

2011-08-30 23:18:14

#include
#include
#include
#include
#include
#include
#include
#include
#include

#define SVRPORT 8888
#define LSNNEM 5
#define MAX_EVENTS 10

int setnonblocking(int sock);

int main()
{
        int sfd, cfd;
        struct sockaddr_in saddr;
        char buf[512];

    int nfds;
    int n;

    int epollfd;
    struct epoll_event ev, *evp;
    struct epoll_event events[MAX_EVENTS];

        memset(&saddr,0,sizeof(saddr));
        saddr.sin_family = AF_INET;
        saddr.sin_port = htons(SVRPORT);
        saddr.sin_addr.s_addr = htonl(INADDR_ANY);

        sfd = socket(AF_INET,SOCK_STREAM,0);
        bind(sfd,(struct sockaddr *)&saddr,sizeof(saddr));
        listen(sfd,LSNNEM);

    epollfd = epoll_create(10);
   
    ev.events = EPOLLIN;
    ev.data.fd = sfd;
    epoll_ctl(epollfd, EPOLL_CTL_ADD, sfd, &ev);

    while(1) {
        nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);

        for (n = 0; n < nfds; ++n) {
            evp = &events[n];
           
            if (evp->data.fd == sfd) {
                cfd = accept(sfd, NULL, NULL);

                setnonblocking(cfd);
                ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
                ev.data.fd = cfd;
                epoll_ctl(epollfd, EPOLL_CTL_ADD, cfd, &ev);
            } else {
                if (evp->events == EPOLLOUT) {
                    memset(buf,'\0',strlen(buf));
                    strcpy(buf,"hello!\n");
                    send(evp->data.fd, buf,strlen(buf)+1,0);
                    epoll_ctl(epollfd, EPOLL_CTL_DEL, cfd, NULL);
                    close(evp->data.fd);
                }
            }
        }
    }
}

int setnonblocking(int sock)
{
    int opts;
    opts = fcntl(sock, F_GETFL);
    opts |= O_NONBLOCK;

    fcntl(sock, F_SETFL, opts);

    return 0;
}
阅读(268) | 评论(0) | 转发(0) |
0

上一篇:clisp webget

下一篇:django using mysql

给主人留下些什么吧!~~