0

我的服务器需要在客户端连接到它时发送数据。我正在使用 Epoll ET 模式。但是怎么做呢?谁能给我一个简单的例子吗?

4

1 回答 1

0

假设您正在侦听您的套接字 ( socket, bind, listen),并将其描述符添加到 epoll (epoll_createepoll_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再次调用。它会告诉你套接字何时准备好写入,而你只是高兴writesendfile离开。

添加大量错误检查,可能TCP_CORK你就完成了。github.com/grahamking/netshare/上有一个工作示例。

我希望这能给你足够的信息来开始。

于 2012-10-11T04:28:28.197 回答