我的服务器需要在客户端连接到它时发送数据。我正在使用 Epoll ET 模式。但是怎么做呢?谁能给我一个简单的例子吗?
问问题
420 次
1 回答
0
假设您正在侦听您的套接字 ( socket
, bind
, listen
),并将其描述符添加到 epoll (epoll_create
和epoll_ctl
),然后epoll_wait
会告诉您何时有新的连接需要接受。
首先,您接受连接(sockfd
是您正在侦听的套接字的描述符,efd
是 epoll 实例)并将其添加到您的 epoll 实例中:
int connfd = accept4(sockfd, NULL, 0, SOCK_NONBLOCK);
struct epoll_event ev;
ev.events = EPOLLOUT | EPOLLET;
ev.data.fd = connfd;
epoll_ctl(efd, EPOLL_CTL_ADD, connfd, &ev)
然后你回到你的主循环并epoll_wait
再次调用。它会告诉你套接字何时准备好写入,而你只是高兴write
或sendfile
离开。
添加大量错误检查,可能TCP_CORK
你就完成了。github.com/grahamking/netshare/上有一个工作示例。
我希望这能给你足够的信息来开始。
于 2012-10-11T04:28:28.197 回答