0
當客戶端連接到服務器時,我的服務器需要發送數據。我正在使用Epoll ET模式。 但如何做到這一點?任何人都可以給我一個簡單的例子嗎?如何在建立連接時以epoll ET模式立即發送數據
當客戶端連接到服務器時,我的服務器需要發送數據。我正在使用Epoll ET模式。 但如何做到這一點?任何人都可以給我一個簡單的例子嗎?如何在建立連接時以epoll ET模式立即發送數據
假設你正在你的插座(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/上有一個工作示例。
我希望這能爲您提供足夠的信息開始。