0

私のサーバーは、クライアントが接続したときにデータを送信する必要があります。Epoll ET モードを使用しています。しかし、それを行う方法は?誰でも簡単な例を教えてもらえますか?

4

1 に答える 1

0

ソケット ( socketbindlisten) をリッスンしていて、その記述子を 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 に答える