【发布时间】:2012-09-29 15:12:26
【问题描述】:
我的服务器需要在客户端连接到它时发送数据。我正在使用 Epoll ET 模式。 但是怎么做呢?谁能给我一个简单的例子吗?
【问题讨论】:
标签: epoll
我的服务器需要在客户端连接到它时发送数据。我正在使用 Epoll ET 模式。 但是怎么做呢?谁能给我一个简单的例子吗?
【问题讨论】:
标签: epoll
假设您正在侦听您的套接字(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/ 上有一个工作示例。
我希望这可以为您提供足够的信息以开始使用。
【讨论】: