{"id":3509,"date":"2017-08-12T07:51:33","date_gmt":"2017-08-11T23:51:33","guid":{"rendered":"https:\/\/ixyzero.com\/blog\/?p=3509"},"modified":"2017-08-12T07:51:33","modified_gmt":"2017-08-11T23:51:33","slug":"linux%e4%b8%8b%e7%9a%84epoll%e7%9b%b8%e5%85%b3%e7%9f%a5%e8%af%86%e5%ad%a6%e4%b9%a0","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/3509.html","title":{"rendered":"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60"},"content":{"rendered":"<p>=Start=<\/p>\n<h4 id=\"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60-\u7f18\u7531\uff1a\">\u7f18\u7531\uff1a<\/h4>\n<p>\u5b66\u4e60\u3001\u63d0\u9ad8\u9700\u8981<\/p>\n<h4 id=\"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60-\u6b63\u6587\uff1a\">\u6b63\u6587\uff1a<\/h4>\n<h5 id=\"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60-\u53c2\u8003\u89e3\u7b54\uff1a\">\u53c2\u8003\u89e3\u7b54\uff1a<\/h5>\n<h6 id=\"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60-epoll\u7f16\u7a0b\u63a5\u53e3\u4ecb\u7ecd\">epoll\u7f16\u7a0b\u63a5\u53e3\u4ecb\u7ecd<\/h6>\n<p>epoll\u5728\u7f16\u7a0b\u4e2d\u6709\u4e09\u4e2a\u63a5\u53e3\uff0c\u5206\u522b\u5982\u4e0b\uff1a<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_528040\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">epoll_create(<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">size);<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">epoll_ctl(<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">epfd,\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">op,\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">fd, struct epoll_event *event)\uff1b<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">epoll_wait(<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">epfd, struct epoll_event *events,\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">maxevents,\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">timeout);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>1. int epoll_create(int size);<\/strong><\/p>\n<p>\u521b\u5efa\u4e00\u4e2aepoll\u7684\u53e5\u67c4\uff0csize\u7528\u6765\u544a\u8bc9\u5185\u6838\u8fd9\u4e2a\u76d1\u542c\u7684\u6570\u76ee\u4e00\u5171\u6709\u591a\u5927\uff0c\u8fd9\u4e2a\u53c2\u6570\u4e0d\u540c\u4e8eselect()\u4e2d\u7684\u7b2c\u4e00\u4e2a\u53c2\u6570\uff0c\u7ed9\u51fa\u6700\u5927\u76d1\u542c\u7684fd+1\u7684\u503c\uff0c<strong><span style=\"color: #ff0000;\">\u53c2\u6570size\u5e76\u4e0d\u662f\u9650\u5236\u4e86epoll\u6240\u80fd\u76d1\u542c\u7684\u63cf\u8ff0\u7b26\u6700\u5927\u4e2a\u6570\uff0c\u53ea\u662f\u5bf9\u5185\u6838\u521d\u59cb\u5206\u914d\u5185\u90e8\u6570\u636e\u7ed3\u6784\u7684\u4e00\u4e2a\u5efa\u8bae<\/span>\u3002<\/strong>\u5f53\u521b\u5efa\u597depoll\u53e5\u67c4\u540e\uff0c\u5b83\u5c31\u4f1a\u5360\u7528\u4e00\u4e2afd\u503c\uff0c\u5728Linux\u4e0b\u5982\u679c\u67e5\u770b\/proc\/$pid\/fd\/\uff0c\u662f\u80fd\u591f\u770b\u5230\u8fd9\u4e2afd\u7684\uff0c\u6240\u4ee5\u5728\u4f7f\u7528\u5b8cepoll\u540e\uff0c\u5fc5\u987b\u8c03\u7528close()\u5173\u95ed\uff0c\u5426\u5219\u53ef\u80fd\u5bfc\u81f4fd\u88ab\u8017\u5c3d\u3002<\/p>\n<p><strong>2. int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);<\/strong><\/p>\n<p>\u51fd\u6570\u662f\u5bf9\u6307\u5b9a\u63cf\u8ff0\u7b26fd\u6267\u884cop\u64cd\u4f5c\u3002<br \/>\n&#8211; epfd\uff1a\u662fepoll_create()\u7684\u8fd4\u56de\u503c\u3002<br \/>\n&#8211; op\uff1a\u8868\u793a\u6dfb\u52a0\/\u5220\u9664\/\u4fee\u6539\u64cd\u4f5c\uff0c\u5206\u522b\u7528\u4e09\u4e2a\u5b8f\u6765\u8868\u793a\uff1a\u6dfb\u52a0EPOLL_CTL_ADD\uff0c\u5220\u9664EPOLL_CTL_DEL\uff0c\u4fee\u6539EPOLL_CTL_MOD\u3002\u8868\u793a\u6dfb\u52a0\u3001\u5220\u9664\u548c\u4fee\u6539\u5bf9fd\u7684\u76d1\u542c\u4e8b\u4ef6\u3002<br \/>\n&#8211; fd\uff1a\u662f\u9700\u8981\u76d1\u542c\u7684fd\uff08\u6587\u4ef6\u63cf\u8ff0\u7b26\uff09<br \/>\n&#8211; epoll_event\uff1a\u662f\u544a\u8bc9\u5185\u6838\u9700\u8981\u76d1\u542c\u4ec0\u4e48\u4e8b\uff0cstruct epoll_event\u7ed3\u6784\u5982\u4e0b\uff1a<\/p>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_569247\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">struct epoll_event {<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">__uint32_t events;\u00a0\u00a0<\/code><code class=\"java comments\">\/* Epoll events *\/<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">epoll_data_t data;\u00a0\u00a0<\/code><code class=\"java comments\">\/* User data variable *\/<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java comments\">\/\/events\u53ef\u4ee5\u662f\u4ee5\u4e0b\u51e0\u4e2a\u5b8f\u7684\u96c6\u5408\uff1a<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">EPOLLIN \uff1a\u8868\u793a\u5bf9\u5e94\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u53ef\u4ee5\u8bfb\uff08\u5305\u62ec\u5bf9\u7aefsocket\u6b63\u5e38\u5173\u95ed\uff09\uff1b<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">EPOLLOUT\uff1a\u8868\u793a\u5bf9\u5e94\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u53ef\u4ee5\u5199\uff1b<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">EPOLLPRI\uff1a\u8868\u793a\u5bf9\u5e94\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u6709\u7d27\u6025\u7684\u6570\u636e\u53ef\u8bfb\uff08\u8fd9\u91cc\u5e94\u8be5\u8868\u793a\u6709\u5e26\u5916\u6570\u636e\u5230\u6765\uff09\uff1b<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java plain\">EPOLLERR\uff1a\u8868\u793a\u5bf9\u5e94\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u53d1\u751f\u9519\u8bef\uff1b<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java plain\">EPOLLHUP\uff1a\u8868\u793a\u5bf9\u5e94\u7684\u6587\u4ef6\u63cf\u8ff0\u7b26\u88ab\u6302\u65ad\uff1b<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java plain\">EPOLLET\uff1a \u5c06EPOLL\u8bbe\u4e3a\u8fb9\u7f18\u89e6\u53d1(Edge Triggered)\u6a21\u5f0f\uff0c\u8fd9\u662f\u76f8\u5bf9\u4e8e\u9ed8\u8ba4\u7684\u6c34\u5e73\u89e6\u53d1(Level Triggered)\u6a21\u5f0f\u6765\u8bf4\u7684\u3002<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java plain\">EPOLLONESHOT\uff1a\u53ea\u76d1\u542c\u4e00\u6b21\u4e8b\u4ef6\uff0c\u5f53\u76d1\u542c\u5b8c\u8fd9\u6b21\u4e8b\u4ef6\u4e4b\u540e\uff0c\u5982\u679c\u8fd8\u9700\u8981\u7ee7\u7eed\u76d1\u542c\u8fd9\u4e2asocket\u7684\u8bdd\uff0c\u9700\u8981\u518d\u6b21\u628a\u8fd9\u4e2asocket\u52a0\u5165\u5230EPOLL\u961f\u5217\u91cc<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>3. int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);<\/strong><\/p>\n<p>\u7b49\u5f85epfd\u4e0a\u7684io\u4e8b\u4ef6\uff0c\u6700\u591a\u8fd4\u56demaxevents\u4e2a\u4e8b\u4ef6\u3002<\/p>\n<p>\u53c2\u6570events\u7528\u6765\u4ece\u5185\u6838\u5f97\u5230\u4e8b\u4ef6\u7684\u96c6\u5408\uff0cmaxevents\u544a\u4e4b\u5185\u6838\u8fd9\u4e2aevents\u6709\u591a\u5927\uff0c\u8fd9\u4e2amaxevents\u7684\u503c\u4e0d\u80fd\u5927\u4e8e\u521b\u5efaepoll_create()\u65f6\u7684size\uff0c\u53c2\u6570timeout\u662f\u8d85\u65f6\u65f6\u95f4\uff08\u6beb\u79d2\uff0c0\u4f1a\u7acb\u5373\u8fd4\u56de\uff0c-1\u5c06\u4e0d\u786e\u5b9a\uff0c\u4e5f\u6709\u8bf4\u6cd5\u8bf4\u662f\u6c38\u4e45\u963b\u585e\uff09\u3002\u8be5\u51fd\u6570\u8fd4\u56de\u9700\u8981\u5904\u7406\u7684\u4e8b\u4ef6\u6570\u76ee\uff0c\u5982\u8fd4\u56de0\u8868\u793a\u5df2\u8d85\u65f6\u3002<\/p>\n<hr \/>\n<div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_278752\" class=\"syntaxhighlighter sh-confluence nogutter java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">#include &lt;stdio.h&gt;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">#include &lt;stdlib.h&gt;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">#include &lt;string.h&gt;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">#include &lt;sys\/types.h&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">#include &lt;sys\/socket.h&gt;<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">#include &lt;netdb.h&gt;<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">#include &lt;unistd.h&gt;<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">#include &lt;fcntl.h&gt;<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">#include &lt;sys\/epoll.h&gt;<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java plain\">#include &lt;errno.h&gt;<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java plain\">#define MAXEVENTS\u00a0<\/code><code class=\"java value\">64<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java keyword\">static<\/code>\u00a0<code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">make_socket_non_blocking (<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">sfd)<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">flags, s;<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">flags = fcntl (sfd, F_GETFL,\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(flags == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"fcntl\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number24 index23 alt1\"><\/div>\n<div class=\"line number25 index24 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">flags |= O_NONBLOCK;<\/code><\/div>\n<div class=\"line number26 index25 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">s = fcntl (sfd, F_SETFL, flags);<\/code><\/div>\n<div class=\"line number27 index26 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number28 index27 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number29 index28 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"fcntl\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number30 index29 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number31 index30 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number32 index31 alt1\"><\/div>\n<div class=\"line number33 index32 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number34 index33 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number35 index34 alt2\"><\/div>\n<div class=\"line number36 index35 alt1\"><code class=\"java keyword\">static<\/code>\u00a0<code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">create_and_bind (<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">*port)<\/code><\/div>\n<div class=\"line number37 index36 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number38 index37 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">struct addrinfo hints;<\/code><\/div>\n<div class=\"line number39 index38 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">struct addrinfo *result, *rp;<\/code><\/div>\n<div class=\"line number40 index39 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">s, sfd;<\/code><\/div>\n<div class=\"line number41 index40 alt2\"><\/div>\n<div class=\"line number42 index41 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">memset (&amp;hints,\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">, sizeof (struct addrinfo));<\/code><\/div>\n<div class=\"line number43 index42 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">hints.ai_family = AF_UNSPEC;\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Return IPv4 and IPv6 choices *\/<\/code><\/div>\n<div class=\"line number44 index43 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">hints.ai_socktype = SOCK_STREAM;\u00a0<\/code><code class=\"java comments\">\/* We want a TCP socket *\/<\/code><\/div>\n<div class=\"line number45 index44 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">hints.ai_flags = AI_PASSIVE;\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* All interfaces *\/<\/code><\/div>\n<div class=\"line number46 index45 alt1\"><\/div>\n<div class=\"line number47 index46 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">s = getaddrinfo (NULL, port, &amp;hints, &amp;result);<\/code><\/div>\n<div class=\"line number48 index47 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s !=\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number49 index48 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number50 index49 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf (stderr,\u00a0<\/code><code class=\"java string\">\"getaddrinfo: %s\\n\"<\/code><code class=\"java plain\">, gai_strerror (s));<\/code><\/div>\n<div class=\"line number51 index50 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number52 index51 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number53 index52 alt2\"><\/div>\n<div class=\"line number54 index53 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">for<\/code>\u00a0<code class=\"java plain\">(rp = result; rp != NULL; rp = rp-&gt;ai_next)<\/code><\/div>\n<div class=\"line number55 index54 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number56 index55 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">sfd = socket (rp-&gt;ai_family, rp-&gt;ai_socktype, rp-&gt;ai_protocol);<\/code><\/div>\n<div class=\"line number57 index56 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(sfd == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number58 index57 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number59 index58 alt2\"><\/div>\n<div class=\"line number60 index59 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">s = bind (sfd, rp-&gt;ai_addr, rp-&gt;ai_addrlen);<\/code><\/div>\n<div class=\"line number61 index60 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s ==\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number62 index61 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number63 index62 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* We managed to bind successfully! *\/<\/code><\/div>\n<div class=\"line number64 index63 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">break<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number65 index64 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number66 index65 alt1\"><\/div>\n<div class=\"line number67 index66 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close (sfd);<\/code><\/div>\n<div class=\"line number68 index67 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number69 index68 alt2\"><\/div>\n<div class=\"line number70 index69 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(rp == NULL)<\/code><\/div>\n<div class=\"line number71 index70 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number72 index71 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf (stderr,\u00a0<\/code><code class=\"java string\">\"Could not bind\\n\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number73 index72 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">-<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number74 index73 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number75 index74 alt2\"><\/div>\n<div class=\"line number76 index75 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">freeaddrinfo (result);<\/code><\/div>\n<div class=\"line number77 index76 alt2\"><\/div>\n<div class=\"line number78 index77 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">sfd;<\/code><\/div>\n<div class=\"line number79 index78 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number80 index79 alt1\"><\/div>\n<div class=\"line number81 index80 alt2\"><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">main (<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">argc,\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">*argv[])<\/code><\/div>\n<div class=\"line number82 index81 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number83 index82 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">sfd, s;<\/code><\/div>\n<div class=\"line number84 index83 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">efd;<\/code><\/div>\n<div class=\"line number85 index84 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">struct epoll_event event;<\/code><\/div>\n<div class=\"line number86 index85 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">struct epoll_event *events;<\/code><\/div>\n<div class=\"line number87 index86 alt2\"><\/div>\n<div class=\"line number88 index87 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(argc !=\u00a0<\/code><code class=\"java value\">2<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number89 index88 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number90 index89 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf (stderr,\u00a0<\/code><code class=\"java string\">\"Usage: %s [port]\\n\"<\/code><code class=\"java plain\">, argv[<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">]);<\/code><\/div>\n<div class=\"line number91 index90 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">exit (EXIT_FAILURE);<\/code><\/div>\n<div class=\"line number92 index91 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number93 index92 alt2\"><\/div>\n<div class=\"line number94 index93 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">sfd = create_and_bind (argv[<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">]);<\/code><\/div>\n<div class=\"line number95 index94 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(sfd == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number96 index95 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number97 index96 alt2\"><\/div>\n<div class=\"line number98 index97 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">s = make_socket_non_blocking (sfd);<\/code><\/div>\n<div class=\"line number99 index98 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number100 index99 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number101 index100 alt2\"><\/div>\n<div class=\"line number102 index101 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">s = listen (sfd, SOMAXCONN);<\/code><\/div>\n<div class=\"line number103 index102 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number104 index103 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number105 index104 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"listen\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number106 index105 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number107 index106 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number108 index107 alt1\"><\/div>\n<div class=\"line number109 index108 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">efd = epoll_create1 (<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number110 index109 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(efd == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number111 index110 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number112 index111 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"epoll_create\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number113 index112 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number114 index113 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number115 index114 alt2\"><\/div>\n<div class=\"line number116 index115 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">event.data.fd = sfd;<\/code><\/div>\n<div class=\"line number117 index116 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">event.events = EPOLLIN | EPOLLET;<\/code><\/div>\n<div class=\"line number118 index117 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">s = epoll_ctl (efd, EPOLL_CTL_ADD, sfd, &amp;event);<\/code><\/div>\n<div class=\"line number119 index118 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number120 index119 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number121 index120 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"epoll_ctl\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number122 index121 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number123 index122 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number124 index123 alt1\"><\/div>\n<div class=\"line number125 index124 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java comments\">\/* Buffer where events are returned *\/<\/code><\/div>\n<div class=\"line number126 index125 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">events = calloc (MAXEVENTS, sizeof event);<\/code><\/div>\n<div class=\"line number127 index126 alt2\"><\/div>\n<div class=\"line number128 index127 alt1\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java comments\">\/* The event loop *\/<\/code><\/div>\n<div class=\"line number129 index128 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">while<\/code>\u00a0<code class=\"java plain\">(<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number130 index129 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number131 index130 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">n, i;<\/code><\/div>\n<div class=\"line number132 index131 alt1\"><\/div>\n<div class=\"line number133 index132 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">n = epoll_wait (efd, events, MAXEVENTS, -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number134 index133 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">for<\/code>\u00a0<code class=\"java plain\">(i =\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">; i &lt; n; i++)<\/code><\/div>\n<div class=\"line number135 index134 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number136 index135 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">((events[i].events &amp; EPOLLERR) ||<\/code><\/div>\n<div class=\"line number137 index136 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">(events[i].events &amp; EPOLLHUP) ||<\/code><\/div>\n<div class=\"line number138 index137 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">(!(events[i].events &amp; EPOLLIN)))<\/code><\/div>\n<div class=\"line number139 index138 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number140 index139 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* An error has occured on this fd, or the socket is not<\/code><\/div>\n<div class=\"line number141 index140 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">ready for reading (why were we notified then?) *\/<\/code><\/div>\n<div class=\"line number142 index141 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">fprintf (stderr,\u00a0<\/code><code class=\"java string\">\"epoll error\\n\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number143 index142 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close (events[i].data.fd);<\/code><\/div>\n<div class=\"line number144 index143 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number145 index144 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number146 index145 alt1\"><\/div>\n<div class=\"line number147 index146 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">else<\/code>\u00a0<code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(sfd == events[i].data.fd)<\/code><\/div>\n<div class=\"line number148 index147 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number149 index148 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* We have a notification on the listening socket, which<\/code><\/div>\n<div class=\"line number150 index149 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">means one or more incoming connections. *\/<\/code><\/div>\n<div class=\"line number151 index150 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">while<\/code>\u00a0<code class=\"java plain\">(<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number152 index151 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number153 index152 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">struct sockaddr in_addr;<\/code><\/div>\n<div class=\"line number154 index153 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">socklen_t in_len;<\/code><\/div>\n<div class=\"line number155 index154 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">infd;<\/code><\/div>\n<div class=\"line number156 index155 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];<\/code><\/div>\n<div class=\"line number157 index156 alt2\"><\/div>\n<div class=\"line number158 index157 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">in_len = sizeof in_addr;<\/code><\/div>\n<div class=\"line number159 index158 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">infd = accept (sfd, &amp;in_addr, &amp;in_len);<\/code><\/div>\n<div class=\"line number160 index159 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(infd == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number161 index160 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number162 index161 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">((errno == EAGAIN) ||<\/code><\/div>\n<div class=\"line number163 index162 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">(errno == EWOULDBLOCK))<\/code><\/div>\n<div class=\"line number164 index163 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number165 index164 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* We have processed all incoming<\/code><\/div>\n<div class=\"line number166 index165 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">connections. *\/<\/code><\/div>\n<div class=\"line number167 index166 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">break<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number168 index167 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number169 index168 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">else<\/code><\/div>\n<div class=\"line number170 index169 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number171 index170 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"accept\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number172 index171 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">break<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number173 index172 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number174 index173 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number175 index174 alt2\"><\/div>\n<div class=\"line number176 index175 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">s = getnameinfo (&amp;in_addr, in_len,<\/code><\/div>\n<div class=\"line number177 index176 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">hbuf, sizeof hbuf,<\/code><\/div>\n<div class=\"line number178 index177 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">sbuf, sizeof sbuf,<\/code><\/div>\n<div class=\"line number179 index178 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">NI_NUMERICHOST | NI_NUMERICSERV);<\/code><\/div>\n<div class=\"line number180 index179 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s ==\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number181 index180 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number182 index181 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf(<\/code><code class=\"java string\">\"Accepted connection on descriptor %d \"<\/code><\/div>\n<div class=\"line number183 index182 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java string\">\"(host=%s, port=%s)\\n\"<\/code><code class=\"java plain\">, infd, hbuf, sbuf);<\/code><\/div>\n<div class=\"line number184 index183 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number185 index184 alt2\"><\/div>\n<div class=\"line number186 index185 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Make the incoming socket non-blocking and add it to the<\/code><\/div>\n<div class=\"line number187 index186 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">list of fds to monitor. *\/<\/code><\/div>\n<div class=\"line number188 index187 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">s = make_socket_non_blocking (infd);<\/code><\/div>\n<div class=\"line number189 index188 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number190 index189 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number191 index190 alt2\"><\/div>\n<div class=\"line number192 index191 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">event.data.fd = infd;<\/code><\/div>\n<div class=\"line number193 index192 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">event.events = EPOLLIN | EPOLLET;<\/code><\/div>\n<div class=\"line number194 index193 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">s = epoll_ctl (efd, EPOLL_CTL_ADD, infd, &amp;event);<\/code><\/div>\n<div class=\"line number195 index194 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number196 index195 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number197 index196 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"epoll_ctl\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number198 index197 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number199 index198 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number200 index199 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number201 index200 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">continue<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number202 index201 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number203 index202 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">else<\/code><\/div>\n<div class=\"line number204 index203 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number205 index204 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* We have data on the fd waiting to be read. Read and<\/code><\/div>\n<div class=\"line number206 index205 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">display it. We must read whatever data is available<\/code><\/div>\n<div class=\"line number207 index206 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">completely, as we are running in edge-triggered mode<\/code><\/div>\n<div class=\"line number208 index207 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">and won't get a notification again for the same<\/code><\/div>\n<div class=\"line number209 index208 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">data. *\/<\/code><\/div>\n<div class=\"line number210 index209 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">int<\/code>\u00a0<code class=\"java plain\">done =\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number211 index210 alt2\"><\/div>\n<div class=\"line number212 index211 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">while<\/code>\u00a0<code class=\"java plain\">(<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number213 index212 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number214 index213 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">ssize_t count;<\/code><\/div>\n<div class=\"line number215 index214 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">char<\/code>\u00a0<code class=\"java plain\">buf[<\/code><code class=\"java value\">512<\/code><code class=\"java plain\">];<\/code><\/div>\n<div class=\"line number216 index215 alt1\"><\/div>\n<div class=\"line number217 index216 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">count = read (events[i].data.fd, buf, sizeof buf);<\/code><\/div>\n<div class=\"line number218 index217 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(count == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number219 index218 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number220 index219 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* If errno == EAGAIN, that means we have read all<\/code><\/div>\n<div class=\"line number221 index220 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">data. So go back to the main loop. *\/<\/code><\/div>\n<div class=\"line number222 index221 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(errno != EAGAIN)<\/code><\/div>\n<div class=\"line number223 index222 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number224 index223 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"read\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number225 index224 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">done =\u00a0<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number226 index225 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number227 index226 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">break<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number228 index227 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number229 index228 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">else<\/code>\u00a0<code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(count ==\u00a0<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number230 index229 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number231 index230 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* End of file. The remote has closed the<\/code><\/div>\n<div class=\"line number232 index231 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">connection. *\/<\/code><\/div>\n<div class=\"line number233 index232 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">done =\u00a0<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number234 index233 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">break<\/code><code class=\"java plain\">;<\/code><\/div>\n<div class=\"line number235 index234 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number236 index235 alt1\"><\/div>\n<div class=\"line number237 index236 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Write the buffer to standard output *\/<\/code><\/div>\n<div class=\"line number238 index237 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">s = write (<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">, buf, count);<\/code><\/div>\n<div class=\"line number239 index238 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(s == -<\/code><code class=\"java value\">1<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number240 index239 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number241 index240 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">perror (<\/code><code class=\"java string\">\"write\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number242 index241 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">abort ();<\/code><\/div>\n<div class=\"line number243 index242 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number244 index243 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number245 index244 alt2\"><\/div>\n<div class=\"line number246 index245 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java keyword\">if<\/code>\u00a0<code class=\"java plain\">(done)<\/code><\/div>\n<div class=\"line number247 index246 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number248 index247 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">printf (<\/code><code class=\"java string\">\"Closed connection on descriptor %d\\n\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number249 index248 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">events[i].data.fd);<\/code><\/div>\n<div class=\"line number250 index249 alt1\"><\/div>\n<div class=\"line number251 index250 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">\/* Closing the descriptor will make epoll remove it<\/code><\/div>\n<div class=\"line number252 index251 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java comments\">from the set of descriptors which are monitored. *\/<\/code><\/div>\n<div class=\"line number253 index252 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">close (events[i].data.fd);<\/code><\/div>\n<div class=\"line number254 index253 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number255 index254 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number256 index255 alt1\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number257 index256 alt2\"><code class=\"java spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number258 index257 alt1\"><\/div>\n<div class=\"line number259 index258 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">free (events);<\/code><\/div>\n<div class=\"line number260 index259 alt1\"><\/div>\n<div class=\"line number261 index260 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java plain\">close (sfd);<\/code><\/div>\n<div class=\"line number262 index261 alt1\"><\/div>\n<div class=\"line number263 index262 alt2\"><code class=\"java spaces\">\u00a0\u00a0<\/code><code class=\"java keyword\">return<\/code>\u00a0<code class=\"java plain\">EXIT_SUCCESS;<\/code><\/div>\n<div class=\"line number264 index263 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h5 id=\"Linux\u4e0b\u7684epoll\u76f8\u5173\u77e5\u8bc6\u5b66\u4e60-\u53c2\u8003\u94fe\u63a5\uff1a\">\u53c2\u8003\u94fe\u63a5\uff1a<\/h5>\n<p><a class=\"external-link\" href=\"https:\/\/banu.com\/blog\/2\/how-to-use-epoll-a-complete-example-in-c\/\" rel=\"nofollow\">https:\/\/banu.com\/blog\/2\/how-to-use-epoll-a-complete-example-in-c\/<\/a><\/p>\n<p>epoll \u4f7f\u7528\u8be6\u89e3<br \/>\n<a class=\"external-link\" href=\"http:\/\/www.cnblogs.com\/haippy\/archive\/2012\/01\/09\/2317269.html\" rel=\"nofollow\">http:\/\/www.cnblogs.com\/haippy\/archive\/2012\/01\/09\/2317269.html<\/a><\/p>\n<p>linux \u7f51\u7edc\u7f16\u7a0b\uff1aepoll \u7684\u5b9e\u4f8b<br \/>\n<a class=\"external-link\" href=\"http:\/\/blog.csdn.net\/shanshanpt\/article\/details\/7383400\" rel=\"nofollow\">http:\/\/blog.csdn.net\/shanshanpt\/article\/details\/7383400<\/a><\/p>\n<p>\u5982\u4f55\u4f7f\u7528epoll\uff1f\u4e00\u4e2a\u5b8c\u6574\u7684C\u4f8b\u5b50<br \/>\n<a class=\"external-link\" href=\"http:\/\/www.yeolar.com\/note\/2012\/07\/02\/epoll-example\/\" rel=\"nofollow\">http:\/\/www.yeolar.com\/note\/2012\/07\/02\/epoll-example\/<\/a><\/p>\n<p>\u901a\u8fc7\u5b8c\u6574\u793a\u4f8b\u6765\u7406\u89e3\u5982\u4f55\u4f7f\u7528 epoll<br \/>\n<a class=\"external-link\" href=\"http:\/\/blog.jobbole.com\/93566\/\" rel=\"nofollow\">http:\/\/blog.jobbole.com\/93566\/<\/a><\/p>\n<p>\u6211\u8bfb\u8fc7\u7684\u6700\u597d\u7684epoll\u8bb2\u89e3&#8211;\u8f6c\u81ea\u201c\u77e5\u4e4e\u201d<br \/>\n<a class=\"external-link\" href=\"http:\/\/yaocoder.blog.51cto.com\/2668309\/888374\" rel=\"nofollow\">http:\/\/yaocoder.blog.51cto.com\/2668309\/888374<\/a><br \/>\n<a class=\"external-link\" href=\"https:\/\/www.zhihu.com\/question\/20122137\/answer\/14049112\" rel=\"nofollow\">https:\/\/www.zhihu.com\/question\/20122137\/answer\/14049112<\/a><\/p>\n<p><a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/epoll.7.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man7\/epoll.7.html<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_create.2.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_create.2.html<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_ctl.2.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_ctl.2.html<\/a><br \/>\n<a class=\"external-link\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_wait.2.html\" rel=\"nofollow\">http:\/\/man7.org\/linux\/man-pages\/man2\/epoll_wait.2.html<\/a><\/p>\n<p>=END=<\/p>\n","protected":false},"excerpt":{"rendered":"<p>=Start= \u7f18\u7531\uff1a \u5b66\u4e60\u3001\u63d0\u9ad8\u9700\u8981 \u6b63\u6587\uff1a \u53c2\u8003\u89e3\u7b54\uff1a epoll\u7f16\u7a0b\u63a5\u53e3\u4ecb\u7ecd epoll\u5728\u7f16\u7a0b\u4e2d\u6709\u4e09\u4e2a\u63a5 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,11,7],"tags":[100,906,30],"class_list":["post-3509","post","type-post","status-publish","format-standard","hentry","category-knowledgebase-2","category-linux","category-programing","tag-c","tag-epoll","tag-linux"],"views":3563,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=3509"}],"version-history":[{"count":1,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3509\/revisions"}],"predecessor-version":[{"id":3510,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/3509\/revisions\/3510"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=3509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=3509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=3509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}