私のサーバーは、クライアントが接続したときにデータを送信する必要があります。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 に答える