2012-09-29 29 views

回答

0

假設你正在你的插座(socketbindlisten)上偵聽,並增加它的描述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/上有一個工作示例。

我希望這能爲您提供足夠的信息開始。