%! %%Creator: troff->tpscript %%CreationDate: Fri May 29 09:22:27 1992 %%EndComments /inch { 480 mul } bind def /rotateit { /pgtop 11 inch def /pgwid 8.5 inch def newpath } bind def /scaleit { 72 480 div dup scale rotateit 1 setlinecap} def /unscaleit { 480 72 div dup scale} def /RBKFontDict 9 dict def /NEWDict 10 dict def RBKFontDict begin /FontType 3 def /FontName (RBK specials) cvn def /FontMatrix [ 0.001 0 0 0.001 0 0] def /FontBBox [ -50 -250 1000 1000 ] def /Encoding 256 array def 0 1 255 { Encoding exch /.notdef put } for Encoding dup 2 /Csq put dup 3 /Cci put dup 4 /Cbx put dup 5 /CSu put dup 15 /Cbu put pop /CharProcs 24 dict dup begin /setC { 0 -50 -250 1000 1000 setcachedevice} def /Cbu { 0 0 moveto 600 setC 300 300 moveto 300 300 250 0 360 arc closepath fill } def /Csq { 0 0 moveto 600 setC 50 50 moveto 500 0 rlineto 0 500 rlineto -500 0 rlineto closepath fill } def /Cbx { 0 0 moveto 600 setC 70 setlinewidth 50 50 moveto 500 0 rlineto 0 500 rlineto -500 0 rlineto closepath stroke } def /Cci { 0 0 moveto 600 setC 70 setlinewidth 550 300 moveto 300 300 250 0 360 arc closepath stroke } def /CSu { 0 0 moveto 715 setC 700 700 scale %% Kolstad & Horton/Polk 12/1989; Font: kolstad 6/24/90 /divsq2 { 1.4142136 div } bind def /mulsq2 { 1.4142136 mul } bind def /TW 0.62 def %% top width /MG 0.12 def %% MidGap /US TW 4 mul MG 6 mul add def %% Uside /UL US TW sub MG sub def %% U length /OR MG TW add def %% outradius /T2 TW divsq2 def /U2 UL divsq2 def /M2 MG divsq2 def /SU { %% sunU currentpoint T2 dup neg rlineto U2 neg dup rlineto currentpoint exch M2 add exch M2 sub MG 135 315 arc U2 dup rlineto T2 dup neg rlineto U2 neg dup rlineto currentpoint exch OR divsq2 sub exch OR divsq2 add OR 315 135 arcn closepath moveto } def /SU2 { SU currentpoint 0 US neg mulsq2 rmoveto 180 rotate SU -180 rotate moveto } def 1 US mulsq2 2 mul div dup scale US divsq2 US mulsq2 US divsq2 add rmoveto 4 { M2 2 mul M2 2 mul rmoveto US mulsq2 0 rmoveto 270 rotate SU2 } repeat %% 0 setlinewidth stroke fill } def end def /BuildChar { NEWDict begin /charcode exch def /fontdict exch def fontdict /CharProcs get begin fontdict /Encoding get charcode get load gsave 0 setlinecap 0 setgray newpath exec grestore end end } def end /RBKFont RBKFontDict definefont pop %%%%%%%%%%%%%%% End special Font scaleit 0 0 moveto /pagebot { showpage restore } def /pagetop { save } def /lastpage {} def /pt { 6.666667 mul } bind def /y { neg 0 exch rmoveto } bind def /X { U moveto } bind def /Y { pgtop exch sub currentpoint pop exch dup /U exch def moveto } bind def /s { show } bind def /S { dup gsave show grestore gsave true charpath 0 setgray stroke grestore } bind def /l { neg rlineto currentpoint stroke dup /U exch def moveto } bind def /c { 2 div /rad exch def currentpoint /y0 exch def /x0 exch def newpath x0 rad add y0 rad 0 360 arc stroke x0 rad add rad add y0 dup /U exch def moveto } def /a { /y2 exch neg def /x2 exch def /y1 exch neg def /x1 exch def x1 y1 rmoveto currentpoint currentpoint x2 x2 mul y2 y2 mul add sqrt y1 neg x1 neg atan y2 x2 atan newpath arc stroke moveto x2 y2 rmoveto currentpoint /U exch def pop } def /e { 2 div /yrad exch def 2 div /xrad exch def currentpoint /y0 exch def /x0 exch def gsave x0 xrad add y0 translate xrad yrad scale LS xrad yrad gt {xrad} {yrad} ifelse div setlinewidth newpath 0 0 1 0 360 arc stroke grestore x0 xrad add xrad add y0 dup /U exch def moveto } def /spln { rcurveto currentpoint stroke dup /U exch def moveto } def % stolen from greenbook page 115-116 /F { findfont exch scalefont setfont } bind def /RE { % re-encode findfont begin currentdict dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall /FontName exch def dup length 0 ne { % if /Encoding Encoding 256 array copy def 0 exch { % forall dup type /nametype eq % if? { Encoding 2 index 2 index put pop 1 add } { exch pop } ifelse } forall } if pop currentdict dup end end /FontName get exch definefont pop } bind def % use make.remap to make new stdencodings: /stdencoding [ 1 /multiply /ntilde /eth /otilde /oacute /idieresis /Ocircumflex /ograve /onequarter /scaron /uacute /odieresis /Ucircumflex /ugrave /yacute /Thorn /zcaron /udieresis /threequarters /threesuperior /ydieresis /aring /Ccedilla /twosuperior /acircumflex /Atilde /Aacute /Agrave /ecircumflex /Eacute /copyright 127 /Adieresis /Egrave /icircumflex /Iacute /onehalf /Edieresis /Igrave /Ntilde /Eth /ocircumflex /Otilde /Oacute /Idieresis /mu /Ograve /Scaron /ucircumflex /Uacute /Odieresis /Ugrave /Yacute /thorn /degree /logicalnot /minus /Zcaron /Udieresis /registered /plusminus /ccedilla /Ydieresis /Aring /atilde /aacute 176 /Acircumflex 181 /divide 190 /brokenbar 192 /agrave 201 /eacute 204 /Ecircumflex 209 /adieresis /egrave /onesuperior /trademark /iacute /Icircumflex /edieresis /igrave ] def /specdwidth 0 def /LS 0 def /setwidth {/specdwidth 1 def dup /LS exch def setlinewidth} def /ft { /fonttype exch def /xsiz exch def /ysiz exch def /sl exch def fonttype [ xsiz pt 0 sl sin sl cos div ysiz pt mul ysiz pt 0 0 ] makefont setfont specdwidth 0 eq {xsiz 4 div dup /LS exch def setlinewidth} if setgray } def /Z { specdwidth 0 eq {dup 4 div dup /LS exch def setlinewidth} if pt scalefont setfont } bind def /M { pgtop exch sub moveto } bind def /L { pgtop exch sub lineto } bind def /cbox { gsave 100 div setgray currentpoint /nowy exch def /nowx exch def /radius exch def /boxdown exch def /boxover exch def currentpoint newpath moveto radius 0 rmoveto nowx boxover add nowy nowx boxover add nowy boxdown sub radius arcto pop pop pop pop nowx boxover add nowy boxdown sub nowx nowy boxdown sub radius arcto pop pop pop pop nowx nowy boxdown sub nowx nowy radius arcto pop pop pop pop nowx nowy nowx boxover add nowy radius arcto pop pop pop pop currentgray 1.0 ne { gsave fill grestore } if 0 setgray stroke grestore } bind def /f.Y /RBKFont findfont def 0 Y save %%EndProlog 0 Y %%Page: 1 1 pagetop stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def 0.00 0.0 10 10 f.R ft 1182 X 521 Y 1440 X stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 22 Z(InterNetNews:)s 2456 X(Usenet)s 1182 X 667 Y 1307 X(transport)s 1948 X(for)s 2183 X(Internet)s 2743 X(sites)s 600 X 835 Y 1521 X stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 12 Z(Rich)s 1694 X(Salz)s 1853 X(\261)s 1919 X f.R 12 Z(Open)s 2119 X(Software)s 2435 X(Foundation)s 840 X 1011 Y 1912 X f.B 12 Z(ABSTRACT)s 840 X 1145 Y 984 X f.R 10 Z(NNTP,)s 1219 X(the)s 1345 X(Network)s 1622 X(News)s 1818 X(Transfer)s 2088 X(Protocol,)s 2375 X(has)s 2508 X(been)s 2678 X(labelled)s 2936 X(the)s 3063 X(most)s 3238 X(widely)s 840 X 1218 Y(implemented)s 1220 X(elective)s 1460 X(protocol)s 1712 X(in)s 1794 X(the)s 1906 X(Internet)s 2114 X(.)s 2183 X(The)s 2317 X(growth)s 2535 X(of)s 2620 X(the)s 2732 X(Internet)s 2970 X(has)s 3089 X(meant)s 3283 X(more)s 840 X 1291 Y(sites)s 987 X(exchanging)s 1322 X(NNTP)s 1524 X(data)s 1636 X(.)s 1703 X(While)s 1895 X(the)s 2005 X(explosive)s 2289 X(growth)s 2505 X(in)s 2585 X(Usenet)s 2799 X(traf\256c)s 2987 X(places)s 3183 X(demands)s 840 X 1364 Y(on)s 928 X(all)s 1018 X(sites,)s 1177 X(the)s 1281 X(goal)s 1418 X(of)s 1495 X(fast)s 1614 X(network)s 1854 X(access)s 2048 X(puts)s 2181 X(particular)s 2460 X(demands)s 2719 X(on)s 2807 X(NNTP)s 3003 X(hosts)s 3140 X(.)s 840 X 1458 Y 984 X(InterNetNews)s 1390 X(is)s 1466 X(an)s 1560 X(implementation)s 2013 X(of)s 2100 X(the)s 2214 X(Usenet)s 2432 X(transport)s 2701 X(layer)s 2867 X(designed)s 3136 X(to)s 3220 X(address)s 840 X 1531 Y(this)s 969 X(situation)s 1200 X(.)s 1271 X(It)s 1344 X(replaces)s 1596 X(the)s 1710 X(standard)s 1964 X f.R 8 Z(UNIX)s 2128 X f.R 10 Z(server)s 2323 X(architecture)s 2672 X(with)s 2822 X(a)s 2883 X(single)s 3074 X(long)s 3192 X(-running)s 840 X 1604 Y(server)s 1027 X(that)s 1152 X(handles)s 1380 X(all)s 1472 X(incoming)s 1749 X(connections)s 2068 X(.)s 2132 X(It)s 2198 X(has)s 2312 X(proven)s 2521 X(to)s 2598 X(be)s 2686 X(quite)s 2845 X(successful,)s 3162 X(providing)s 840 X 1677 Y(quick)s 1010 X(and)s 1128 X(ef\256cient)s 1370 X(news)s 1529 X(transfer)s 1733 X(.)s 600 X 1823 Y 1150 X f.B 10 Z(Introduction)s 600 X 1932 Y 744 X f.R 10 Z(Usenet)s 965 X(is)s 1045 X(a)s 1111 X(distributed)s 1433 X(bulletin)s 1674 X(board)s 1861 X(system,)s 600 X 2005 Y(built)s 753 X(as)s 839 X(a)s 899 X(logical)s 1112 X(network)s 1360 X(on)s 1456 X(top)s 1570 X(of)s 1654 X(other)s 1820 X(networks)s 600 X 2078 Y(and)s 745 X(connections)s 1064 X(.)s 1152 X(By)s 1278 X(design,)s 1519 X(messages)s 1822 X(resemble)s 600 X 2151 Y(standard)s 850 X(Internet)s 1082 X(electronic)s 1370 X(mail)s 1513 X(messages)s 1789 X(as)s 1868 X(de\256ned)s 600 X 2224 Y(in)s 686 X(RFC822)s 945 X([Crocker82])s 1269 X(.)s 1343 X(The)s 1482 X(Usenet)s 1703 X(message)s 1965 X(for-)s 600 X 2297 Y(mat)s 751 X(is)s 846 X(described)s 1151 X(in)s 1252 X(RFC1036)s 1558 X([Adams87])s 1857 X(.)s 1945 X(This)s 600 X 2370 Y(de\256nes)s 823 X(some)s 998 X(additional)s 1300 X(headers)s 1504 X(.)s 1577 X(It)s 1652 X(also)s 1794 X(limits)s 1982 X(the)s 600 X 2443 Y(values)s 805 X(of)s 894 X(some)s 1069 X(of)s 1158 X(the)s 1274 X(standard)s 1533 X(headers)s 1770 X(as)s 1859 X(well)s 2008 X(as)s 600 X 2516 Y(giving)s 792 X(some)s 955 X(of)s 1032 X(them)s 1188 X(special)s 1397 X(semantics)s 1662 X(.)s 600 X 2610 Y 744 X f.I 10 Z(Newsgroups)s 1119 X f.R 10 Z(are)s 1248 X(the)s 1377 X(classi\256cation)s 1775 X(system)s 2009 X(of)s 600 X 2683 Y(Usenet)s 786 X(.)s 860 X(The)s 999 X(required)s 1255 X(Newsgroups)s 1621 X(header)s 1833 X(speci\256es)s 600 X 2756 Y(where)s 799 X(a)s 866 X(message,)s 1147 X(or)s 1239 X(article,)s 1462 X(should)s 1676 X(be)s 1776 X(\256led)s 1932 X(upon)s 600 X 2829 Y(reception)s 849 X(.)s 923 X(Sites)s 1089 X(are)s 1206 X(free)s 1345 X(to)s 1432 X(carry)s 1604 X(whatever)s 1884 X(groups)s 600 X 2902 Y(they)s 739 X(want)s 869 X(.)s 932 X(Most)s 1093 X(sites)s 1237 X(carry)s 1398 X(the)s 1504 X(core)s 1643 X(set)s 1742 X(of)s 1822 X(so)s 1881 X(-called)s 600 X 2975 Y(``mainstream'')s 1045 X(groups)s 1225 X(.)s 1308 X(There)s 1507 X(are)s 1632 X(currently)s 1916 X(about)s 600 X 3048 Y(730)s 734 X(of)s 824 X(these)s 997 X(groups,)s 1229 X(and)s 1360 X(one)s 1491 X(or)s 1581 X(two)s 1716 X(new)s 1862 X(ones)s 2019 X(is)s 600 X 3121 Y(created)s 816 X(every)s 986 X(week)s 1127 X(.)s 600 X 3215 Y 744 X(Messages)s 1041 X(generated)s 1339 X(at)s 1426 X(a)s 1494 X(site)s 1626 X(are)s 1746 X(sent)s 1892 X(to)s 1982 X(the)s 600 X 3288 Y(site's)s 765 X(``neighbors'')s 1138 X(who)s 1275 X(process)s 1498 X(them)s 1655 X(and)s 1774 X(relay)s 1930 X(them)s 600 X 3361 Y(to)s 676 X(their)s 823 X(neighbors,)s 1126 X(and)s 1247 X(so)s 1331 X(on)s 1397 X(.)s 1461 X(Sites)s 1617 X(can)s 1735 X(be)s 1823 X(intercon-)s 600 X 3434 Y(nected)s 806 X(\261)s 870 X(indeed,)s 1096 X(on)s 1193 X(the)s 1306 X(Internet,)s 1561 X(this)s 1688 X(is)s 1763 X(quite)s 1927 X(com-)s 600 X 3507 Y(mon)s 718 X(.)s 779 X(See)s 898 X(Figure)s 1094 X(1)s 1127 X(.)s 600 X 3551 Y 1464 0 l 600 X 3756 Y 1143 X f.R 26 Z(B)s 600 X 3842 Y 1080 X 0 -240 l 600 X 1080 X 240 0 l 600 X 1320 X 0 240 l 600 X 1320 X -240 0 l 600 X 4092 Y 1618 X(D)s 600 X 4178 Y 1560 X 0 -240 l 600 X 1560 X 240 0 l 600 X 1800 X 0 240 l 600 X 1800 X -240 0 l 600 X 4428 Y 1143 X(C)s 600 X 4514 Y 1080 X 0 -240 l 600 X 1080 X 240 0 l 600 X 1320 X 0 240 l 600 X 1320 X -240 0 l 600 X 4092 Y 658 X(A)s 600 X 4178 Y 0 -240 l 600 X 240 0 l 600 X 840 X 0 240 l 600 X 840 X -240 0 l 600 X 3722 Y 1080 X -240 336 l 600 X 840 X 240 336 l 600 X 3722 Y 1320 X 240 336 l 600 X 1560 X -240 336 l 600 X 4587 Y f.B 10 Z(Figure)s 839 X(1)s f.R 10 Z(:)s 913 X 935 X(Small)s 1141 X(Usenet)s 1376 X(topology)s 1662 X(\(all)s 1802 X(links)s 1982 X(are)s 600 X 4660 Y 720 X(two)s 820 X(-way\))s 975 X(.)s 2256 X 1823 Y 2400 X(The)s 2543 X(Path)s 2701 X(header)s 2918 X(is)s 3002 X(used)s 3163 X(to)s 3254 X(prevent)s 3493 X(message)s 2256 X 1896 Y(loops)s 2400 X(.)s 2462 X(For)s 2577 X(example,)s 2844 X(an)s 2930 X(article)s 3122 X(written)s 3334 X(at)s 3405 X f.I 10 Z(A)s 3468 X f.R 10 Z(could)s 3638 X(get)s 2256 X 1969 Y(sent)s 2396 X(to)s 2480 X f.I 10 Z(B)s f.R 10 Z(,)s 2570 X f.I 10 Z(D)s f.R 10 Z(,)s 2668 X f.I 10 Z(C)s f.R 10 Z(,)s 2762 X(and)s 2891 X(then)s 3039 X(back)s 3198 X(to)s 3283 X f.I 10 Z(A)s 3324 X f.R 10 Z(.)s 3396 X(Before)s 3610 X(pro-)s 2256 X 2042 Y(pagating)s 2514 X(an)s 2605 X(article,)s 2819 X(a)s 2876 X(site)s 2997 X(prepends)s 3264 X(its)s 3355 X(own)s 3496 X(name)s 3668 X(to)s 2256 X 2115 Y(the)s 2367 X(Path)s 2515 X(header)s 2693 X(.)s 2761 X(Before)s 2971 X(propagating)s 3318 X(an)s 3410 X(article)s 3608 X(to)s 3690 X(a)s 2256 X 2188 Y(site,)s 2394 X(the)s 2503 X(receiving)s 2779 X(host)s 2917 X(checks)s 3125 X(to)s 3203 X(make)s 3374 X(sure)s 3511 X(that)s 3638 X(the)s 2256 X 2261 Y(site)s 2374 X(that)s 2499 X(would)s 2689 X(receive)s 2907 X(the)s 3014 X(article)s 3208 X(does)s 3355 X(not)s 3465 X(appear)s 3668 X(in)s 2256 X 2334 Y(the)s 2364 X(Path)s 2509 X(line)s 2610 X(.)s 2675 X(For)s 2792 X(example,)s 3061 X(when)s 3230 X(the)s 3337 X(article)s 3531 X(arrived)s 2256 X 2407 Y(at)s 2335 X(site)s 2459 X f.I 10 Z(C)s f.R 10 Z(,)s 2551 X(the)s 2664 X(Path)s 2814 X(would)s 3011 X(contain)s 3239 X f.I 10 Z(A!B!D)s f.R 10 Z(,)s 3461 X(so)s 3551 X(site)s 3676 X f.I 10 Z(C)s 2256 X 2480 Y f.R 10 Z(would)s 2444 X(know)s 2613 X(not)s 2720 X(to)s 2794 X(send)s 2938 X(the)s 3042 X(article)s 3233 X(to)s 3307 X f.I 10 Z(A)s 3348 X f.R 10 Z(.)s 2256 X 2574 Y 2400 X(Sites)s 2554 X(also)s 2685 X(keep)s 2834 X(a)s 2888 X(record)s 3082 X(of)s 3161 X(the)s 3267 X(Message)s 3501 X(-ID's)s 3665 X(of)s 2256 X 2647 Y(all)s 2363 X(articles)s 2596 X(they)s 2749 X(currently)s 3028 X(have)s 3154 X(.)s 3231 X(If)s 3313 X f.I 10 Z(D)s 3399 X f.R 10 Z(receives)s 3657 X(an)s 2256 X 2720 Y(article)s 2451 X(from)s 2606 X f.I 10 Z(B)s f.R 10 Z(,)s 2690 X(it)s 2754 X(will)s 2885 X(reject)s 3061 X(the)s 3169 X(article)s 3364 X(if)s 3431 X f.I 10 Z(C)s 3501 X f.R 10 Z(offers)s 3682 X(it)s 2256 X 2793 Y(later)s 2376 X(.)s 2448 X(For)s 2573 X(self)s 2670 X(-protection,)s 3013 X(most)s 3176 X(sites)s 3329 X(keep)s 3488 X(a)s 3550 X(record)s 2256 X 2866 Y(of)s 2340 X(recent)s 2534 X(articles)s 2759 X(that)s 2890 X(they)s 3035 X(no)s 3131 X(longer)s 3331 X(have)s 3457 X(.)s 3526 X(This)s 3675 X(is)s 2256 X 2939 Y(very)s 2398 X(useful)s 2585 X(when)s 2753 X(another)s 2977 X(site)s 3095 X(dumps)s 3295 X(a)s 3348 X(\(usually)s 3586 X(quite)s 2256 X 3012 Y(large\))s 2434 X(batch)s 2601 X(of)s 2678 X(old)s 2785 X(news)s 2944 X(back)s 3092 X(out)s 3199 X(to)s 3273 X(Usenet)s 3459 X(.)s 2256 X 3106 Y 2400 X(For)s 2515 X(the)s 2620 X(past)s 2751 X(few)s 2875 X(years,)s 3057 X(the)s 3163 X(amount)s 3387 X(of)s 3466 X(data)s 3602 X(gen-)s 2256 X 3179 Y(erated)s 2445 X(by)s 2536 X(Usenet)s 2747 X(sites)s 2892 X(has)s 3006 X(been)s 3156 X(doubling)s 3416 X(every)s 3588 X(year)s 3703 X(.)s 2256 X 3252 Y(A)s 2343 X(site)s 2476 X(that)s 2616 X(receives)s 2875 X(all)s 2982 X(the)s 3103 X(mainstream)s 3455 X(groups)s 3675 X(is)s 2256 X 3325 Y(receiving)s 2536 X(over)s 2685 X(17)s 2781 X(megabytes)s 3097 X(a)s 3157 X(day)s 3283 X(spread)s 3487 X(out)s 3602 X(over)s 2256 X 3398 Y(11,000)s 2468 X(articles)s 2693 X([Adams92])s 2992 X(.)s 3061 X(About)s 3257 X(20%)s 3409 X(of)s 3495 X(the)s 3608 X(data)s 2256 X 3471 Y(is)s 2339 X(article)s 2545 X(headers,)s 2803 X(and)s 2936 X(while)s 3122 X(all)s 3227 X(of)s 3319 X(them)s 3490 X(must)s 3657 X(be)s 2256 X 3544 Y(scanned)s 2499 X(only)s 2645 X(half)s 2777 X(of)s 2860 X(it)s 2926 X(is)s 3000 X(must)s 3159 X(be)s 3251 X(processed)s 3543 X(by)s 3638 X(the)s 2256 X 3617 Y(Usenet)s 2464 X(software)s 2694 X(.)s 3596 Y f.I 8 Z(1)s 2256 X 3711 Y 2400 X f.R 10 Z(The)s 2528 X(number)s 2755 X(of)s 2834 X(sites)s 2979 X(participating)s 3343 X(in)s 3420 X(Usenet)s 3631 X(has)s 2256 X 3784 Y(been)s 2414 X(growing)s 2667 X(almost)s 2877 X(as)s 2964 X(quickly)s 3164 X(.)s 3234 X(Based)s 3428 X(on)s 3525 X(articles)s 2256 X 3857 Y(his)s 2363 X(site)s 2486 X(receives)s 2735 X(and)s 2861 X(survey)s 3068 X(data)s 3210 X(sent)s 3348 X(in)s 3430 X(by)s 3526 X(partici-)s 2256 X 3930 Y(pating)s 2469 X(sites,)s 2652 X(Brian)s 2846 X(Reid)s 3017 X(estimates)s 3313 X(that)s 3459 X(there)s 3638 X(are)s 2256 X 4003 Y(36,000)s 2471 X(sites)s 2624 X(with)s 2776 X(1)s 2809 X(.4)s 2892 X(million)s 3120 X(participants)s 3467 X([Reid91])s 3703 X(.)s 2256 X 4076 Y(A)s 2335 X(``sendsys'')s 2660 X(message)s 2917 X(to)s 2999 X(the)s 3111 X(``inet'')s 3330 X(distribution)s 3668 X(in)s 2256 X 4149 Y(June)s 2407 X(of)s 2491 X(1989)s 2652 X(received)s 2908 X(about)s 3085 X(200)s 3213 X(replies)s 3422 X(in)s 3504 X(the)s 3616 X(\256rst)s 2256 X 4222 Y(twenty)s 2438 X(-four)s 2602 X(hours)s 2749 X(.)s 2820 X(A)s 2899 X(year)s 3045 X(later,)s 3213 X(nearly)s 3411 X(700)s 3541 X(replies)s 2256 X 4295 Y(were)s 2408 X(received)s 2635 X(.)s 2696 X(\(Sendsys)s 2958 X(is)s 3026 X(a)s 3079 X(special)s 3289 X(article)s 3481 X(that)s 3605 X(asks)s 2256 X 4368 Y(all)s 2358 X(receiving)s 2641 X(sites)s 2795 X(to)s 2881 X(send)s 3037 X(back)s 3197 X(an)s 3293 X(email)s 3476 X(message,)s 2256 X 4441 Y(usually)s 2482 X(without)s 2719 X(human)s 2933 X(intervention;)s 3308 X(by)s 3407 X(convention,)s 2256 X 4514 Y(inet)s 2379 X(is)s 2446 X(primarily)s 2717 X(the)s 2821 X(set)s 2918 X(of)s 2995 X(sites)s 3137 X(on)s 3225 X(the)s 3329 X(Internet)s 3537 X(.\))s 2256 X 4593 Y f.R 16 Z 720 0 l 2256 X 4639 Y 2300 X f.I 8 Z(1)s 4660 Y f.R 9 Z(Yes,)s 2485 X(this)s 2622 X(means)s 2826 X(that,)s 2982 X(as)s 3082 X(far)s 3199 X(as)s 3299 X(the)s 3423 X(software)s 3680 X(is)s 2256 X 4727 Y(concerned,)s 2539 X(Usenet)s 2726 X(is)s 2786 X(over)s 2913 X(90%)s 3043 X(noise)s 3170 X(.)s 600 X 4967 Y f.B 10 Z(Summer)s 868 X('92)s 978 X(USENIX)s 1251 X(\261)s 1306 X(June)s 1465 X(8)s 1498 X(-June)s 1679 X(12,)s 1784 X(1992)s 1938 X(\261)s 1993 X(San)s 2122 X(Antonio,)s 2390 X(TX)s 3654 X(93)s 5280 Y pagebot %%Page: 94 2 pagetop stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 10 Z 360 X 215 Y(InterNetNews)s 779 X(.)s 796 X(.)s 813 X(.)s 3361 X(Salz)s 360 X 448 Y 504 X stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def f.R 10 Z(The)s 635 X(NNTP)s 836 X(protocol)s 1086 X(is)s 1159 X(de\256ned)s 1383 X(in)s 1463 X(Internet)s 1699 X(RFC)s 360 X 521 Y(977)s 495 X([Kantor86])s 826 X(published)s 1120 X(in)s 1207 X(February,)s 1499 X(1986)s 1631 X(.)s 1705 X(This)s 360 X 594 Y(was)s 491 X(accompanied)s 872 X(by)s 966 X(the)s 1076 X(general)s 1301 X(public)s 1496 X(release)s 1711 X(of)s 1794 X(a)s 360 X 667 Y(reference)s 638 X(implementation,)s 1105 X(also)s 1242 X(called)s 1432 X(``nntp)s 1594 X(.'')s 1705 X(This)s 360 X 740 Y(has)s 472 X(been)s 621 X(the)s 727 X(only)s 869 X(NNTP)s 1067 X(implementation)s 1512 X(that)s 1637 X(is)s 1706 X(gen-)s 360 X 813 Y(erally)s 535 X(available)s 800 X(to)s 870 X f.R 8 Z(UNIX)s 1024 X f.R 10 Z(sites)s 1144 X(.)s 360 X 940 Y 857 X f.B 10 Z(Usenet)s 1072 X(Software)s 360 X 1049 Y 504 X f.R 10 Z(In)s 606 X(addition)s 872 X(to)s 972 X(InterNetNews,)s 1412 X(there)s 1594 X(are)s 1724 X(two)s 360 X 1122 Y(major)s 543 X(Usenet)s 756 X(packages)s 1027 X(available)s 1296 X(for)s 1395 X f.R 8 Z(UNIX)s 1553 X f.R 10 Z(sites)s 1673 X(.)s 1738 X(All)s 360 X 1195 Y(three)s 524 X(share)s 695 X(several)s 915 X(common)s 1179 X(implementation)s 1631 X(details)s 1807 X(.)s 360 X 1268 Y(A)s 432 X(newsgroup)s 747 X(name)s 916 X(such)s 1062 X(as)s 1141 X(comp)s 1289 X(.foo)s 1417 X(is)s 1485 X(mapped)s 1719 X(to)s 1794 X(a)s 360 X 1341 Y(directory)s 634 X(comp/foo)s 922 X(within)s 1126 X(a)s 1189 X(global)s 1389 X(spool)s 1566 X(directory)s 1807 X(.)s 360 X 1414 Y(An)s 477 X(article)s 682 X(posted)s 892 X(to)s 979 X(a)s 1044 X(group)s 1233 X(is)s 1313 X(assigned)s 1578 X(a)s 1643 X(unique)s 360 X 1487 Y(increasing)s 666 X(number)s 900 X(based)s 1083 X(on)s 1180 X(a)s 1241 X(\256le)s 1358 X(called)s 1550 X(the)s 1663 X stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 10 Z(active)s 360 X 1560 Y f.R 10 Z(\256le)s 446 X(.)s 512 X(If)s 583 X(an)s 673 X(article)s 869 X(is)s 941 X(posted)s 1142 X(to)s 1221 X(multiple)s 1471 X(groups,)s 1694 X(links)s 360 X 1633 Y(are)s 472 X(used)s 624 X(so)s 713 X(that)s 844 X(only)s 992 X(one)s 1118 X(copy)s 1277 X(of)s 1362 X(the)s 1474 X(data)s 1616 X(is)s 1692 X(kept)s 1807 X(.)s 360 X 1706 Y(A)s 444 X f.I 10 Z(sys)s 561 X f.R 10 Z(\256le)s 682 X(contains)s 940 X(patterns)s 1187 X(describing)s 1500 X(what)s 1665 X(news-)s 360 X 1779 Y(groups)s 572 X(the)s 686 X(site)s 812 X(wishes)s 1026 X(to)s 1110 X(receive,)s 1353 X(and)s 1482 X(how)s 1629 X(articles)s 360 X 1852 Y(should)s 559 X(be)s 644 X(propagated)s 940 X(.)s 1001 X(In)s 1078 X(most)s 1230 X(cases,)s 1411 X(this)s 1530 X(means)s 1723 X(that)s 360 X 1925 Y(a)s 412 X(record)s 604 X(of)s 681 X(the)s 785 X(article)s 976 X(is)s 1043 X(written)s 1255 X(to)s 1329 X(a)s 1381 X(``batch\256le'')s 1723 X(that)s 360 X 1998 Y(is)s 427 X(processed)s 712 X(off)s 789 X(-line)s 934 X(to)s 1008 X(do)s 1096 X(the)s 1200 X(actual)s 1383 X(sending)s 1590 X(.)s 360 X 2092 Y 504 X(The)s 630 X(\256rst)s 756 X(Usenet)s 964 X(package)s 1205 X(is)s 1273 X(called)s 1457 X(B)s 1524 X(News,)s 1716 X(also)s 360 X 2165 Y(known)s 564 X(as)s 644 X(B2)s 721 X(.11)s 804 X(.)s 867 X(The)s 995 X(B)s 1063 X(news)s 1224 X(model)s 1415 X(is)s 1484 X(very)s 1626 X(simple:)s 360 X 2238 Y(the)s 471 X(program)s 725 X f.I 10 Z(rnews)s 914 X f.R 10 Z(is)s 989 X(run)s 1107 X(to)s 1189 X(process)s 1419 X(each)s 1572 X(incoming)s 360 X 2311 Y(article)s 529 X(.)s 596 X(Locking)s 845 X(is)s 917 X(used)s 1066 X(to)s 1145 X(make)s 1317 X(sure)s 1455 X(that)s 1583 X(only)s 1728 X(one)s 360 X 2384 Y f.I 10 Z(rnews)s 545 X f.R 10 Z(process)s 771 X(tries)s 913 X(to)s 991 X(update)s 1195 X(the)s 1303 X(active)s 1490 X(\256le)s 1602 X(and)s 1724 X(his-)s 360 X 2457 Y(tory)s 493 X(database)s 724 X(.)s 789 X(At)s 881 X(one)s 1002 X(site)s 1121 X(that)s 1247 X(received)s 1499 X(over)s 1642 X(15,000)s 360 X 2530 Y(articles)s 581 X(per)s 692 X(day,)s 831 X(the)s 939 X(locking)s 1165 X(would)s 1357 X(often)s 1520 X(fail)s 1637 X(so)s 1723 X(that)s 360 X 2603 Y(10)s 455 X(to)s 536 X(100)s 664 X(duplicates)s 964 X(were)s 1122 X(not)s 1235 X(uncommon)s 1534 X(.)s 1601 X(Because)s 360 X 2676 Y(each)s 516 X(article)s 718 X(is)s 796 X(handled)s 1040 X(by)s 1139 X(a)s 1202 X(separate)s 1456 X(process,)s 1707 X(it)s 1779 X(is)s 360 X 2749 Y(impossible)s 672 X(to)s 746 X(pre)s 831 X(-calcuate)s 1096 X(or)s 1173 X(cache)s 1348 X(any)s 1466 X(useful)s 1651 X(data)s 1763 X(.)s 360 X 2843 Y 504 X(More)s 674 X(importantly,)s 1029 X(\256le)s 1141 X(I/O)s 1256 X(had)s 1378 X(become)s 1612 X(a)s 1668 X(major)s 360 X 2916 Y(bottleneck)s 639 X(.)s 701 X(A)s 771 X(site)s 887 X(that)s 1010 X(feeds)s 1173 X(10)s 1261 X(other)s 1420 X(sites)s 1562 X(does)s 1706 X(over)s 360 X 2989 Y(150,000)s 661 X(open/append/cl)s 1069 X(ose)s 1244 X(operations)s 1608 X(on)s 1760 X(its)s 360 X 3062 Y(batch\256les)s 617 X(.)s 681 X(It)s 747 X(is)s 817 X(generally)s 1090 X(agreed)s 1292 X(that)s 1417 X(B)s 1485 X(news)s 1646 X(cannot)s 360 X 3135 Y(keep)s 512 X(up)s 604 X(with)s 749 X(current)s 965 X(Usenet)s 1178 X(volume;)s 1424 X(it)s 1489 X(is)s 1561 X(no)s 1654 X(longer)s 360 X 3208 Y(being)s 536 X(maintained,)s 879 X(and)s 1003 X(its)s 1095 X(author)s 1293 X(has)s 1410 X(said)s 1545 X(more)s 1709 X(then)s 360 X 3281 Y(once)s 508 X(that)s 631 X(the)s 735 X(software)s 987 X(should)s 1186 X(be)s 1271 X(considered)s 1582 X(``dead)s 1752 X(.'')s 360 X 3375 Y 504 X(C)s 579 X(News)s 762 X(gets)s 901 X(much)s 1080 X(better)s 1264 X(performance)s 1633 X(then)s 1780 X(B)s 360 X 3448 Y(news)s 531 X(by)s 631 X(processing)s 950 X(articles)s 1178 X(in)s 1263 X(batches)s 1497 X([Collyer87])s 1807 X(.)s 360 X 3521 Y(The)s 488 X f.I 10 Z(relaynews)s 783 X f.R 10 Z(program)s 1032 X(is)s 1101 X(run)s 1213 X(several)s 1427 X(times)s 1597 X(a)s 1651 X(day)s 1772 X(to)s 360 X 3594 Y(process)s 586 X(all)s 679 X(the)s 786 X(articles)s 1006 X(that)s 1132 X(have)s 1283 X(been)s 1434 X(received)s 1686 X(since)s 360 X 3667 Y(the)s 474 X(last)s 600 X(run)s 688 X(.)s 759 X(Since)s 940 X(only)s 1090 X(one)s 1218 X f.I 10 Z(relaynews)s 1521 X f.R 10 Z(program)s 1779 X(is)s 360 X 3740 Y(running,)s 613 X(it)s 681 X(is)s 756 X(not)s 871 X(necessary)s 1160 X(to)s 1241 X(do)s 1336 X(\256ne)s 1436 X(-grain)s 1624 X(locking)s 360 X 3813 Y(of)s 453 X(any)s 587 X(of)s 680 X(the)s 800 X(supporting)s 1122 X(data)s 1272 X(\256les)s 1384 X(.)s 1461 X(More)s 1643 X(impor-)s 360 X 3886 Y(tantly,)s 563 X(it)s 634 X(can)s 759 X(keep)s 917 X(the)s 1031 X(entire)s 1216 X(active)s 1409 X(and)s 1537 X(sys)s 1654 X(\256le)s 1772 X(in)s 360 X 3959 Y(memory)s 582 X(.)s 674 X(It)s 768 X(can)s 914 X(also)s 1075 X(use)s 1218 X(buffered)s 1497 X(I/O)s 1640 X(on)s 1760 X(its)s 360 X 4032 Y(batch\256les,)s 669 X(reducing)s 937 X(the)s 1054 X(amount)s 1289 X(of)s 1379 X(system)s 1600 X(calls)s 1758 X(by)s 360 X 4105 Y(one)s 478 X(or)s 555 X(two)s 677 X(orders)s 865 X(of)s 942 X(magnitude)s 1224 X(.)s 360 X 4199 Y 504 X(An)s 618 X(alpha)s 797 X(version)s 1027 X(of)s 1116 X(C)s 1194 X(News)s 1380 X(was)s 1518 X(released)s 1772 X(in)s 360 X 4272 Y(October,)s 633 X(1987)s 765 X(.)s 845 X(Within)s 1072 X(four)s 1222 X(years)s 1403 X(it)s 1481 X(surpassed)s 1780 X(B)s 360 X 4345 Y(news)s 534 X(in)s 623 X(popularity,)s 951 X(and)s 1085 X(there)s 1257 X(are)s 1377 X(now)s 1529 X(more)s 1704 X(sites)s 360 X 4418 Y(running)s 588 X(C)s 654 X(News)s 828 X(then)s 965 X(ever)s 1102 X(ran)s 1209 X(B)s 1275 X(news)s 1412 X(.)s 360 X 4512 Y 504 X(From)s 709 X(the)s 852 X(beginning,)s 1196 X(the)s 1339 X(NNTP)s 1575 X(reference)s 360 X 4585 Y(implementation)s 816 X(was)s 955 X(layered)s 1187 X(on)s 1288 X(top)s 1407 X(of)s 1496 X(the)s 1612 X(existing)s 360 X 4658 Y(Usenet)s 575 X(software:)s 875 X(an)s 967 X(article)s 1165 X(received)s 1421 X(from)s 1579 X(a)s 1638 X(remote)s 360 X 4731 Y(NNTP)s 563 X(peer)s 707 X(was)s 840 X(written)s 1059 X(to)s 1140 X(a)s 1199 X(temporary)s 1502 X(\256le)s 1617 X(and)s 1742 X(the)s 2016 X 448 Y(appropriate)s 2342 X f.I 10 Z(rnews)s 2523 X f.R 10 Z(or)s 2600 X f.I 10 Z(relaynews)s 2893 X f.R 10 Z(program)s 3140 X(processed)s 3425 X(it)s 3463 X(.)s 2016 X 521 Y(In)s 2107 X(order)s 2283 X(to)s 2371 X(avoid)s 2555 X(processing)s 2875 X(an)s 2973 X(article)s 3177 X(the)s 3294 X(system)s 2016 X 594 Y(already)s 2251 X(has,)s 2396 X(it)s 2473 X(\256rst)s 2616 X(does)s 2777 X(a)s 2846 X(lookup)s 3069 X(on)s 3174 X(the)s 3295 X(history)s 2016 X 667 Y(database)s 2274 X(to)s 2353 X(see)s 2466 X(if)s 2534 X(the)s 2643 X(article)s 2839 X(exists)s 2992 X(.)s 3057 X(It)s 3124 X(soon)s 3275 X(became)s 2016 X 740 Y(apparent)s 2284 X(that)s 2423 X(invoking)s 2698 X f.I 10 Z(relaynews)s 3008 X f.R 10 Z(for)s 3124 X(every)s 3311 X(article)s 2016 X 813 Y(lost)s 2139 X(all)s 2233 X(of)s 2314 X(C)s 2383 X(News's)s 2608 X(speed)s 2785 X(gain,)s 2942 X(so)s 3026 X(the)s 3133 X(NNTP)s 3332 X(pack-)s 2016 X 886 Y(age)s 2145 X(was)s 2285 X(changed)s 2543 X(to)s 2631 X(write)s 2806 X(a)s 2873 X(set)s 2985 X(of)s 3077 X(articles)s 3309 X(into)s 3450 X(a)s 2016 X 959 Y(batch,)s 2200 X(and)s 2318 X(offer)s 2469 X(the)s 2573 X(batch)s 2740 X(to)s 2814 X f.I 10 Z(relaynews)s 3085 X f.R 10 Z(.)s 2016 X 1053 Y 2160 X(When)s 2349 X(articles)s 2574 X(arrive)s 2760 X(faster)s 2939 X(then)s 3085 X f.I 10 Z(relaynews)s 3387 X f.R 10 Z(can)s 2016 X 1126 Y(process)s 2242 X(them,)s 2419 X(they)s 2560 X(must)s 2716 X(be)s 2805 X(spooled)s 3012 X(.)s 3077 X(If)s 3147 X(two)s 3272 X(sites)s 3417 X(\()s f.I 10 Z(B)s 2016 X 1199 Y f.R 10 Z(and)s 2143 X f.I 10 Z(C)s 2218 X f.R 10 Z(in)s 2301 X(the)s 2414 X(previous)s 2674 X(examples\))s 2981 X(both)s 3131 X(offer)s 3292 X(a)s 3354 X(third)s 2016 X 1272 Y(site)s 2134 X(\()s f.I 10 Z(D)s f.R 10 Z(\))s 2250 X(the)s 2356 X(same)s 2518 X(article)s 2710 X(at)s 2782 X(the)s 2887 X(``same)s 3092 X(time'')s 3279 X(then)s 3417 X(an)s 2016 X 1345 Y(extra)s 2174 X(copy)s 2327 X(will)s 2456 X(be)s 2543 X(spooled,)s 2791 X(only)s 2933 X(to)s 3010 X(be)s 3098 X(rejected)s 3336 X(when)s 2016 X 1418 Y(it)s 2097 X(is)s 2184 X(processed,)s 2506 X(wasting)s 2756 X(disk)s 2909 X(space;)s 3119 X(this)s 3258 X(problem)s 2016 X 1491 Y(multiplies)s 2356 X(as)s 2483 X(the)s 2636 X(number)s 2910 X(of)s 3036 X(incoming)s 3360 X(sites)s 2016 X 1564 Y(increases)s 2262 X(.)s 1543 Y f.I 8 Z(2)s 1564 Y 2334 X f.R 10 Z(To)s 2436 X(alleviate)s 2693 X(this)s 2818 X(problem,)s 3085 X(most)s 3243 X(sites)s 3392 X(run)s 2016 X 1637 Y(Paul)s 2195 X(Vixie's)s 2452 X f.I 10 Z(msgidd)s f.R 10 Z(,)s 2720 X(a)s 2809 X(daemon)s 3079 X(that)s 3239 X(keeps)s 3450 X(a)s 2016 X 1710 Y(memory)s 2238 X(-resident)s 2499 X(list)s 2609 X(of)s 2691 X(article)s 2887 X(Message)s 3121 X(-ID's)s 3288 X(offered)s 2016 X 1783 Y(within)s 2235 X(the)s 2365 X(last)s 2507 X(24)s 2620 X(hours)s 2767 X(.)s 2853 X(The)s 3004 X(NNTP)s 3225 X(server)s 3435 X(is)s 2016 X 1856 Y(modi\256ed)s 2282 X(so)s 2370 X(that)s 2500 X(it)s 2567 X(tells)s 2709 X(this)s 2835 X(daemon)s 3075 X(all)s 3172 X(of)s 3256 X(the)s 3368 X(arti-)s 2016 X 1929 Y(cles)s 2145 X(that)s 2270 X(it)s 2332 X(is)s 2401 X(handing)s 2639 X(to)s 2715 X(Usenet)s 2925 X(and)s 3044 X(queries)s 3260 X(the)s 3365 X(dae-)s 2016 X 2002 Y(mon)s 2163 X(before)s 2363 X(telling)s 2565 X(the)s 2677 X(remote)s 2893 X(site)s 3017 X(that)s 3148 X(it)s 3216 X(needs)s 3398 X(the)s 2016 X 2075 Y(article)s 2185 X(.)s 2254 X(This)s 2403 X(is)s 2478 X(not)s 2593 X(a)s 2653 X(perfect)s 2869 X(solution)s 3114 X(\261)s 3177 X(if)s 3248 X(the)s 3359 X(\256rst,)s 2016 X 2148 Y(spooled,)s 2268 X(copy)s 2425 X(of)s 2508 X(the)s 2618 X(article)s 2815 X(is)s 2888 X(lost)s 3013 X(or)s 3097 X(corrupted,)s 3398 X(the)s 2016 X 2221 Y(site)s 2139 X(will)s 2272 X(likely)s 2453 X(never)s 2629 X(be)s 2720 X(offered)s 2940 X(the)s 3050 X(article)s 3247 X(after)s 3398 X(the)s 2016 X 2294 Y f.I 10 Z(msgidd)s 2256 X f.R 10 Z(cache)s 2457 X(entry)s 2642 X(has)s 2779 X(expired)s 2979 X(.)s 3067 X(Going)s 3282 X(further,)s 2016 X 2367 Y f.I 10 Z(msgidd)s 2234 X f.R 10 Z(is)s 2305 X(work)s 2441 X(-around)s 2673 X(for)s 2775 X(a)s 2830 X(problem)s 3077 X(inherent)s 3321 X(in)s 3398 X(the)s 2016 X 2440 Y(current)s 2227 X(software)s 2479 X(architecture)s 2796 X(.)s 2016 X 2534 Y 2160 X(Other)s 2334 X(problems,)s 2621 X(while)s 2792 X(not)s 2899 X(as)s 2977 X(severe,)s 3188 X(lead)s 3323 X(to)s 3398 X(the)s 2016 X 2607 Y(conclusion)s 2338 X(that)s 2472 X(a)s 2534 X(new)s 2677 X(implementation)s 3130 X(of)s 3217 X(Usenet)s 3435 X(is)s 2016 X 2680 Y(needed)s 2227 X(for)s 2326 X(Internet)s 2556 X(sites)s 2676 X(.)s 2737 X(For)s 2851 X(example:)s 2016 X 2753 Y 2079 X f.Y 10 Z(\017)s 2150 X f.R 10 Z(Since)s 2328 X(all)s 2425 X(articles)s 2650 X(are)s 2762 X(spooled,)s 3016 X f.I 10 Z(relaynews)s 3317 X f.R 10 Z(can-)s 2016 X 2826 Y 2150 X(not)s 2261 X(tell)s 2374 X(the)s 2481 X(NNTP)s 2680 X(server)s 2868 X(the)s 2975 X(ultimate)s 3221 X(disposi-)s 2016 X 2899 Y 2150 X(tion)s 2285 X(of)s 2371 X(the)s 2484 X(article,)s 2701 X(and)s 2828 X(the)s 2941 X(server)s 3135 X(cannot)s 3345 X(tell)s 2016 X 2972 Y 2150 X(its)s 2251 X(peer)s 2402 X(at)s 2487 X(the)s 2605 X(other)s 2778 X(end)s 2910 X(of)s 3001 X(the)s 3119 X(wire)s 3238 X(.)s 3313 X(This)s 2016 X 3045 Y 2150 X(hides)s 2321 X(transmission)s 2689 X(problems)s 2937 X(.)s 3006 X(For)s 3128 X(example,)s 3402 X(a)s 2016 X 3118 Y 2150 X(site)s 2271 X(tracing)s 2483 X(the)s 2591 X(communication)s 3033 X(has)s 3148 X(no)s 3240 X(way)s 3377 X(of)s 2016 X 3191 Y 2150 X(\256nding)s 2361 X(out)s 2469 X(an)s 2556 X(article)s 2749 X(was)s 2877 X(rejected)s 3114 X(because)s 3350 X(the)s 2016 X 3264 Y 2150 X(remote)s 2360 X(site)s 2478 X(does)s 2624 X(not)s 2733 X(receive)s 2951 X(that)s 3076 X(particular)s 3357 X(set)s 2016 X 3337 Y 2150 X(of)s 2227 X(newsgroups)s 2544 X(.)s 2016 X 3410 Y 2079 X f.Y 10 Z(\017)s 2150 X f.R 10 Z(The)s 2279 X(NNTP)s 2478 X(reference)s 2752 X(implementation)s 3199 X(is)s 3270 X(show-)s 2016 X 3483 Y 2150 X(ing)s 2272 X(signs)s 2446 X(of)s 2538 X(age)s 2631 X(.)s 2707 X(Maintaining)s 3070 X(the)s 3188 X(server)s 3387 X(is)s 2016 X 3556 Y 2150 X(becoming)s 2473 X(a)s 2563 X(maintenance)s 2963 X(nightmare;)s 3314 X(over)s 2016 X 3629 Y 2150 X(one)s 2246 X(-tenth)s 2424 X(of)s 2501 X(its)s 2587 X(6,800)s 2758 X(lines)s 2907 X(are)s 3011 X f.I 10 Z(#ifdef)s 3164 X f.R 10 Z(-related)s 3369 X(.)s 2016 X 3702 Y 2079 X f.Y 10 Z(\017)s 2150 X f.R 10 Z(All)s 2266 X(articles)s 2491 X(are)s 2604 X(written)s 2825 X(to)s 2908 X(disk)s 3050 X(at)s 3130 X(extra)s 3295 X(time)s 3415 X(.)s 2016 X 3775 Y 2150 X(Disks)s 2330 X(are)s 2439 X(getting)s 2652 X(bigger,)s 2866 X(but)s 2978 X(not)s 3090 X(faster,)s 3283 X(while)s 2016 X 3848 Y 2150 X(CPU's,)s 2366 X(memory,)s 2627 X(and)s 2745 X(networks)s 3011 X(are)s 3093 X(.)s 2016 X 3975 Y 2363 X f.B 10 Z(InterNetNews)s 2782 X(architecture)s 2016 X 4084 Y 2160 X f.R 10 Z(There)s 2351 X(are)s 2468 X(four)s 2613 X(key)s 2744 X(programs)s 3030 X(in)s 3117 X(the)s 3235 X(InterNet-)s 2016 X 4157 Y(News)s 2190 X(package)s 2431 X(\(see)s 2561 X(Figure)s 2757 X(2\):)s 2016 X 4230 Y f.I 10 Z(Innd)s 2170 X f.R 10 Z(is)s 2259 X(the)s 2385 X(principal)s 2668 X(news)s 2850 X(server)s 3058 X(for)s 3180 X(incoming)s 2016 X 4303 Y 2150 X(newsfeeds;)s 2016 X 4392 Y f.R 16 Z 720 0 l 2016 X 4438 Y 2060 X f.I 8 Z(2)s 4459 Y f.R 9 Z(This)s 2249 X(is)s 2344 X(quite)s 2520 X(common)s 2786 X(for)s 2911 X(Internet)s 3155 X(sites,)s 3333 X(where)s 2016 X 4526 Y(redundant)s 2291 X(fast)s 2412 X(newsfeeds)s 2695 X(are)s 2802 X(common)s 3046 X(and)s 3166 X(where)s 3346 X(many)s 2016 X 4593 Y(Usenet)s 2223 X(administrators)s 2608 X(seem)s 2772 X(to)s 2859 X(be)s 2956 X(avid)s 3100 X(players)s 3315 X(of)s 3406 X(the)s 2016 X 4660 Y(``exchange)s 2311 X(news)s 2461 X(with)s 2594 X(as)s 2670 X(many)s 2830 X(other)s 2980 X(people)s 3167 X(as)s 3243 X(possible'')s 2016 X 4727 Y(game)s 2147 X(.)s 360 X 4967 Y f.B 10 Z(94)s 1598 X(Summer)s 1866 X('92)s 1976 X(USENIX)s 2249 X(\261)s 2304 X(June)s 2463 X(8)s 2496 X(-June)s 2677 X(12,)s 2782 X(1992)s 2936 X(\261)s 2991 X(San)s 3120 X(Antonio,)s 3388 X(TX)s 5280 Y pagebot %%Page: 95 3 pagetop stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 10 Z 600 X 215 Y(Salz)s 3250 X(InterNetNews)s 3669 X(.)s 3686 X(.)s 3703 X(.)s 600 X 448 Y stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 10 Z(innxmit)s 834 X stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def f.R 10 Z(reads)s 1006 X(a)s 1067 X(\256le)s 1184 X(identifying)s 1508 X(articles)s 1734 X(and)s 1861 X(offers)s 600 X 521 Y 734 X(them)s 890 X(to)s 964 X(another)s 1186 X(site;)s 600 X 594 Y f.I 10 Z(ctlinnd)s 819 X f.R 10 Z(sends)s 989 X(control)s 1200 X(commands)s 1511 X(to)s 1585 X f.I 10 Z(innd)s f.R 10 Z(;)s 600 X 667 Y f.I 10 Z(nnrpd)s 791 X f.R 10 Z(is)s 858 X(an)s 943 X(NNTP)s 1139 X(server)s 1324 X(oriented)s 1565 X(for)s 1664 X(newsreaders)s 1994 X(.)s 600 X 761 Y 744 X(Of)s 841 X(these)s 1006 X(programs,)s 1301 X(the)s 1410 X(most)s 1568 X(important)s 1856 X(is)s 1929 X f.I 10 Z(innd)s 2047 X f.R 10 Z(.)s 600 X 834 Y(We)s 718 X(\256rst)s 847 X(mention)s 1091 X(enough)s 1311 X(of)s 1390 X(its)s 1478 X(architecture)s 1819 X(to)s 1895 X(give)s 2034 X(a)s 600 X 907 Y(context)s 826 X(for)s 932 X(the)s 1043 X(other)s 1209 X(programs,)s 1506 X(and)s 1632 X(then)s 1777 X(discuss)s 2000 X(its)s 600 X 980 Y(design)s 801 X(and)s 924 X(features)s 1163 X(in)s 1242 X(more)s 1405 X(detail)s 1581 X(at)s 1656 X(the)s 1764 X(end)s 1886 X(of)s 1967 X(this)s 600 X 1053 Y(section)s 790 X(.)s 600 X 1097 Y 1464 0 l 600 X 1956 Y 1159 X(ctlinnd)s 600 X 1264 Y 1001 X(innd)s 1141 X(daemon)s 600 X 1725 Y 1500 X(Local)s 1675 X(newsreaders)s 600 X 1456 Y 407 X(Remote)s 637 X(Feeds)s 600 X 1608 Y 1636 X f.R 40 Z 0 -76 l 600 X 1636 X 230 0 l 600 X 1867 X 0 76 l 600 X 1867 X -230 0 l 600 X 1455 Y 1636 X 0 -76 l 600 X 1378 Y 1636 X 230 0 l 600 X 1867 X 0 76 l 600 X 1455 Y 1867 X -230 0 l 600 X 1301 Y 1636 X 0 -76 l 600 X 1224 Y 1636 X 230 0 l 600 X 1867 X 0 76 l 600 X 1301 Y 1867 X -230 0 l 600 X 1636 X 0 -76 l 600 X 1224 Y 1636 X 230 0 l 600 X 1867 X 0 76 l 600 X 1301 Y 1867 X -230 0 l 600 X 1493 Y 753 X 230 0 l 600 X 1647 Y 753 X 230 0 l 600 X 1340 Y 753 X 230 0 l 600 X 1877 Y 1137 X 115 -115 l 600 X 1214 X f.R 20 Z 0 -38 l 600 X 1214 X 76 0 l 600 X 1291 X 0 38 l 600 X 1291 X -76 0 l 600 X 1992 Y 1099 X f.R 40 Z 0 -115 l 600 X 1099 X 384 0 l 600 X 1483 X 0 115 l 600 X 1483 X -384 0 l 600 X 1762 Y 984 X f.R 20 Z 0 -499 l 600 X 984 X 38 0 l 600 X 1022 X 0 499 l 600 X 1022 X -38 0 l 600 X 984 X f.R 40 Z 0 -614 l 600 X 984 X 384 0 l 600 X 1368 X 0 614 l 600 X 1368 X -384 0 l 600 X 2065 Y 948 X f.B 10 Z(Figure)s 1160 X(2)s f.R 10 Z(:)s 1234 X 1256 X(Innd)s 1399 X(architecture)s 600 X 2109 Y 1464 0 l 600 X 2203 Y 744 X f.I 10 Z(Innd)s 917 X f.R 10 Z(is)s 1014 X(a)s 1096 X(single)s 1308 X(daemon)s 1571 X(that)s 1724 X(receives)s 1996 X(all)s 600 X 2276 Y(incoming)s 875 X(articles,)s 1110 X(\256les)s 1245 X(them,)s 1418 X(and)s 1536 X(queues)s 1743 X(them)s 1899 X(up)s 1987 X(for)s 600 X 2349 Y(propagation)s 918 X(.)s 986 X(It)s 1056 X(waits)s 1227 X(for)s 1333 X(connections)s 1682 X(on)s 1778 X(the)s 1890 X(NNTP)s 600 X 2422 Y(port)s 707 X(.)s 788 X(When)s 989 X(a)s 1061 X(connection)s 1396 X(is)s 1483 X(received,)s 1769 X(a)s 1841 X f.I 10 Z(getpeer-)s 600 X 2495 Y(name)s 755 X f.R 10 Z(\(2\))s 855 X(is)s 923 X(done)s 1052 X(.)s 1115 X(If)s 1183 X(the)s 1289 X(host)s 1424 X(is)s 1493 X(not)s 1602 X(in)s 1678 X(an)s 1765 X(access)s 1961 X(\256le,)s 600 X 2568 Y(then)s 745 X(an)s 838 X f.I 10 Z(nnrpd)s 1026 X f.R 10 Z(process)s 1256 X(is)s 1331 X(spawned)s 1594 X(with)s 1742 X(the)s 1853 X(connec-)s 600 X 2641 Y(tion)s 726 X(tied)s 850 X(to)s 925 X(its)s 1012 X(standard)s 1261 X(input)s 1421 X(and)s 1540 X(output)s 1710 X(.)s 2620 Y f.I 8 Z(3)s 2641 Y 1777 X f.R 10 Z(It)s 1841 X(is)s 1909 X(worth)s 600 X 2714 Y(noting)s 798 X(that)s 927 X f.I 10 Z(nnrpd)s 1113 X f.R 10 Z(is)s 1186 X(only)s 1332 X(about)s 1508 X(3,500)s 1685 X(lines)s 1839 X(of)s 1921 X(code,)s 600 X 2787 Y(and)s 731 X(20%)s 888 X(of)s 978 X(them)s 1148 X(are)s 1266 X(for)s 1379 X(the)s 1497 X(``POST'')s 1784 X(command,)s 600 X 2860 Y(used)s 748 X(to)s 826 X(verify)s 1010 X(the)s 1117 X(headers)s 1346 X(in)s 1423 X(a)s 1478 X(user's)s 1662 X(article)s 1831 X(.)s 1895 X f.I 10 Z(Nnrpd)s 600 X 2933 Y f.R 10 Z(provides)s 855 X(all)s 949 X(NNTP)s 1149 X(commands)s 1464 X(except)s 1665 X(for)s 1769 X(``IHAVE'')s 600 X 3006 Y(and)s 731 X(an)s 829 X(incomplete)s 1162 X(version)s 1392 X(of)s 1481 X(``NEWNEWS'')s 1910 X(.)s 1983 X(On)s 600 X 3079 Y(the)s 735 X(other)s 926 X(hand,)s 1126 X(it)s 1218 X(does)s 1394 X(provide)s 1651 X(extensions)s 1987 X(for)s 600 X 3152 Y(pattern)s 786 X(-matching)s 1102 X(on)s 1213 X(an)s 1321 X(article)s 1534 X(header)s 1756 X(and)s 1896 X(listing)s 600 X 3225 Y(exactly)s 816 X(what)s 968 X(articles)s 1185 X(are)s 1289 X(in)s 1363 X(a)s 1415 X(group)s 1569 X(.)s 1630 X(The)s 1757 X(NNTP)s 1954 X(pro-)s 600 X 3298 Y(tocol)s 758 X(seems)s 946 X(to)s 1022 X(be)s 1109 X(a)s 1163 X(good)s 1319 X(example)s 1570 X(of)s 1649 X(the)s 1750 X f.R 8 Z(UNIX)s 1905 X f.R 10 Z(philo-)s 600 X 3371 Y(sophy:)s 823 X(it)s 885 X(is)s 954 X(small,)s 1141 X(general,)s 1379 X(and)s 1499 X(powerful)s 1763 X(and)s 1883 X(can)s 2001 X(be)s 600 X 3444 Y(implemented)s 972 X(in)s 1046 X(a)s 1098 X(very)s 1238 X(small)s 1406 X(program)s 1631 X(.)s 600 X 3538 Y 744 X(Articles)s 989 X(are)s 1103 X(usually)s 1328 X(forwarded)s 1633 X(by)s 1732 X(having)s 1946 X f.I 10 Z(innd)s 600 X 3611 Y f.R 10 Z(record)s 811 X(the)s 934 X(article)s 1144 X(in)s 1237 X(a)s 1307 X(``batch\256le'')s 1666 X(which)s 1869 X(is)s 1954 X(pro-)s 600 X 3684 Y(cessed)s 809 X(by)s 909 X(another)s 1143 X(program)s 1368 X(.)s 1441 X(For)s 1567 X(Internet)s 1810 X(sites,)s 1982 X(the)s 600 X 3757 Y f.I 10 Z(innxmit)s 829 X f.R 10 Z(program)s 1082 X(is)s 1155 X(used)s 1305 X(to)s 1385 X(offer)s 1542 X(articles)s 1765 X(to)s 1844 X(the)s 1953 X(host)s 600 X 3830 Y(speci\256ed)s 862 X(on)s 952 X(its)s 1040 X(command)s 1327 X(line)s 1428 X(.)s 3809 Y f.I 8 Z(4)s 3830 Y 1496 X f.R 10 Z(The)s 1624 X(input)s 1786 X(to)s 1863 X f.I 10 Z(innxmit)s 600 X 3903 Y f.R 10 Z(is)s 671 X(a)s 727 X(set)s 828 X(of)s 909 X(lines)s 1062 X(containing)s 1370 X(a)s 1426 X(pathname)s 1711 X(to)s 1788 X(the)s 1895 X(article)s 600 X 3976 Y(and)s 721 X(its)s 810 X(Message)s 1044 X(-ID)s 1136 X(.)s 1200 X(Since)s 1374 X(the)s 1481 X(Message)s 1715 X(-ID)s 1833 X(is)s 1904 X(in)s 1982 X(the)s 600 X 4049 Y(batch\256le,)s 880 X f.I 10 Z(innxmit)s 1113 X f.R 10 Z(does)s 1266 X(not)s 1382 X(have)s 1539 X(to)s 1622 X(open)s 1782 X(the)s 1895 X(article)s 600 X 4122 Y(and)s 724 X(scan)s 871 X(it)s 937 X(before)s 1135 X(offering)s 1377 X(the)s 1488 X(article)s 1686 X(to)s 1767 X(the)s 1878 X(remote)s 600 X 4195 Y(site)s 694 X(.)s 760 X(This)s 906 X(can)s 1026 X(give)s 1168 X(signi\256cant)s 1474 X(savings)s 1701 X(if)s 1769 X(the)s 1878 X(remote)s 600 X 4268 Y(site)s 716 X(already)s 935 X(has)s 1046 X(a)s 1098 X(percentage)s 1410 X(of)s 1487 X(the)s 1591 X(articles)s 1786 X(.)s 600 X 4459 Y f.R 16 Z 720 0 l 600 X 4505 Y 644 X f.I 8 Z(3)s 4526 Y f.R 9 Z(Unlike)s 863 X(other)s 1016 X(implementations)s 1419 X(,)s 1463 X(no)s 1552 X(single)s 1725 X(INN)s 1860 X(program)s 600 X 4593 Y(implements)s 902 X(the)s 996 X(entire)s 1154 X(NNTP)s 1330 X(protocol)s 1531 X(.)s 600 X 4639 Y 644 X f.I 8 Z(4)s 4660 Y f.R 9 Z(Other)s 843 X(programs,)s 1120 X(like)s 1246 X f.I 9 Z(nntplink)s f.R 9 Z(,)s 1494 X(are)s 1603 X(supported)s 1875 X(but)s 1987 X(not)s 600 X 4727 Y(part)s 714 X(of)s 784 X(the)s 878 X(INN)s 1004 X(distribution)s 1282 X(.)s 2256 X 448 Y 2400 X f.R 10 Z(Until)s 2569 X(recently,)s 2833 X f.I 10 Z(innxmit)s 3065 X f.R 10 Z(used)s 3218 X f.I 10 Z(writev)s 3418 X f.R 10 Z(to)s 3502 X(send)s 3656 X(its)s 2256 X 521 Y(data)s 2393 X(to)s 2470 X(the)s 2577 X(remote)s 2788 X(host)s 2899 X(.)s 2963 X(At)s 3055 X(start)s 3171 X(-up)s 3284 X(it)s 3347 X(\256lled)s 3510 X(a)s 3564 X(three)s 3698 X(-)s 2256 X 594 Y(element)s 2508 X f.I 10 Z(struct)s 2683 X(iovec)s 2864 X f.R 10 Z(array)s 3040 X(with)s 3198 X(the)s 3320 X(following)s 3619 X(ele-)s 2256 X 667 Y(ments:)s stdencoding /NCourier /Courier RE /f.CW /NCourier findfont def 2256 X 769 Y 2304 X f.CW 10 Z([0])s 2504 X({)s 2584 X(")s 2624 X(.",)s 2784 X(1)s 2864 X(};)s 2256 X 842 Y 2304 X([1])s 2504 X({)s 2584 X f.I 10 Z(placeholder)s 2943 X f.CW 10 Z(};)s 2256 X 915 Y 2304 X([2])s 2504 X({)s 2584 X("\\r\\n")s 2864 X(})s 2256 X 1017 Y f.R 10 Z(To)s 2356 X(write)s 2520 X(a)s 2576 X(line,)s 2720 X(the)s 2828 X f.I 10 Z(placeholder)s 3173 X f.R 10 Z(was)s 3303 X(\256lled)s 3467 X(in)s 3545 X(with)s 3690 X(a)s 2256 X 1090 Y(pointer)s 2468 X(to)s 2542 X(the)s 2646 X(buffer,)s 2847 X(and)s 2965 X(its)s 3051 X(length,)s 3257 X(and)s 3375 X(a)s 3427 X(single)s 3609 X f.I 10 Z(wri-)s 2256 X 1163 Y(tev)s 2368 X f.R 10 Z(was)s 2505 X(done,)s 2684 X(starting)s 2919 X(from)s 3082 X(either)s 3269 X(element)s 3516 X(zero)s 3665 X(or)s 2256 X 1236 Y(one)s 2352 X(.)s 2436 X(While)s 2645 X(this)s 2786 X(implementation)s 3251 X(was)s 3399 X(clever,)s 3624 X(and)s 2256 X 1309 Y(simpler)s 2491 X(then)s 2640 X(what)s 2804 X(was)s 2942 X(done)s 3105 X(elsewhere,)s 3424 X(it)s 3496 X(was)s 3635 X(not)s 2256 X 1382 Y(very)s 2405 X(fast)s 2502 X(.)s 2572 X f.I 10 Z(Innxmit)s 2806 X f.R 10 Z(now)s 2950 X(uses)s 3095 X(a)s 3155 X(16k)s 3284 X(buffer)s 3476 X(and)s 3602 X(only)s 2256 X 1455 Y(does)s 2404 X(a)s 2460 X f.I 10 Z(write)s 2624 X f.R 10 Z(when)s 2795 X(the)s 2904 X(next)s 3046 X(line)s 3174 X(would)s 3367 X(not)s 3479 X(\256t)s 3535 X(.)s 3601 X(This)s 2256 X 1528 Y(is)s 2326 X(also)s 2459 X(consistent)s 2751 X(with)s 2894 X(ideas)s 3056 X(used)s 3202 X(throughout)s 3517 X(the)s 3623 X(rest)s 2256 X 1601 Y(of)s 2360 X(INN:)s 2568 X(use)s 2706 X(the)s 2837 X f.I 10 Z(read)s 3009 X f.R 10 Z(and)s 3155 X f.I 10 Z(write)s 3343 X f.R 10 Z(system)s 3579 X(calls,)s 2256 X 1674 Y(referencing)s 2584 X(the)s 2689 X(data)s 2824 X(out)s 2932 X(of)s 3010 X(large)s 3167 X(buffers)s 3378 X(while)s 3550 X(avoid-)s 2256 X 1747 Y(ing)s 2366 X(the)s 2473 X(copying)s 2713 X(commonly)s 3024 X(done)s 3179 X(by)s 3271 X(the)s 3379 X(standard)s 3631 X(I/O)s 2256 X 1820 Y(library)s 2434 X(.)s 2256 X 1914 Y 2400 X(The)s 2541 X f.I 10 Z(ctlinnd)s 2764 X f.R 10 Z(program)s 3026 X(is)s 3108 X(used)s 3267 X(to)s 3357 X(tell)s 3482 X(the)s 3602 X f.I 10 Z(innd)s 2256 X 1987 Y f.R 10 Z(server)s 2443 X(to)s 2519 X(perform)s 2757 X(special)s 2968 X(tasks)s 3102 X(.)s 3165 X(It)s 3229 X(does)s 3374 X(this)s 3494 X(by)s 3583 X(com-)s 2256 X 2060 Y(municating)s 2602 X(over)s 2765 X(a)s 2837 X f.R 8 Z(UNIX)s 2969 X f.R 10 Z(-domain)s 3237 X(datagram)s 3532 X(socket)s 3703 X(.)s 2256 X 2133 Y(The)s 2403 X(socket)s 2617 X(is)s 2705 X(behind)s 2929 X(a)s 3002 X(\256rewall)s 3249 X(directory)s 3532 X(that)s 3675 X(is)s 2256 X 2206 Y(mode)s 2454 X(770,)s 2620 X(so)s 2729 X(that)s 2880 X(only)s 3048 X(members)s 3344 X(of)s 3450 X(the)s 3583 X(news)s 2256 X 2279 Y(administration)s 2667 X(group)s 2845 X(can)s 2962 X(send)s 3107 X(messages)s 3383 X(to)s 3458 X(it)s 3496 X(.)s 3558 X(It)s 3622 X(is)s 3690 X(a)s 2256 X 2352 Y(very)s 2399 X(small)s 2570 X(program)s 2820 X(that)s 2946 X(parses)s 3138 X(the)s 3245 X(\256rst)s 3374 X(parameter)s 3668 X(in)s 2256 X 2425 Y(its)s 2345 X(command)s 2633 X(line)s 2759 X(and)s 2879 X(converts)s 3129 X(it)s 3191 X(to)s 3267 X(an)s 3354 X(internal)s 3583 X(com-)s 2256 X 2498 Y(mand)s 2441 X(identi\256er)s 2683 X(.)s 2759 X(This)s 2915 X(identi\256er)s 3195 X(and)s 3329 X(the)s 3449 X(remaining)s 2256 X 2571 Y(parameters)s 2595 X(are)s 2721 X(sent)s 2873 X(to)s 2969 X f.I 10 Z(innd)s 3131 X f.R 10 Z(which)s 3338 X(processes)s 3638 X(the)s 2256 X 2644 Y(command,)s 2572 X(and)s 2704 X(sends)s 2888 X(back)s 3051 X(a)s 3118 X(formatted)s 3415 X(reply)s 3552 X(.)s 3628 X(For)s 2256 X 2717 Y(example,)s 2535 X(the)s 2652 X(following)s 2946 X(commands)s 3270 X(stops)s 3441 X(the)s 3557 X(server)s 2256 X 2790 Y(from)s 2417 X(accepting)s 2706 X(any)s 2834 X(new)s 2977 X(connections,)s 3345 X(adds)s 3499 X(a)s 3561 X(news-)s 2256 X 2863 Y(group,)s 2451 X(and)s 2571 X(then)s 2710 X(tells)s 2847 X(it)s 2909 X(to)s 2985 X(recompute)s 3291 X(the)s 3397 X(list)s 3504 X(of)s 3583 X(hosts)s 2256 X 2936 Y(that)s 2379 X(are)s 2483 X(authorized)s 2787 X(newsfeeds:)s 2256 X 3032 Y 2304 X f.CW 9 Z(ctlinnd)s 2592 X(pause)s 2808 X("Clearing)s 3168 X(out)s 3312 X(log)s 3456 X(files")s 2256 X 3099 Y 2304 X(ctlinnd)s 2592 X(newgroup)s 2916 X(comp)s 3060 X(.sources)s 3348 X(.unix)s 3564 X(m)s 3636 X(\\)s 2256 X 3166 Y 2736 X(vixie@pa)s 3024 X(.dec)s 3168 X(.com)s 2256 X 3233 Y 2304 X(ctlinnd)s 2592 X(reload)s 2844 X(newsfeeds)s 3204 X("Added)s 3456 X(OSF)s 3600 X(feed")s 2256 X 3300 Y 2304 X(ctlinnd)s 2592 X(go)s 2700 X("")s 2256 X 3402 Y f.R 10 Z(The)s 2394 X(text)s 2529 X(arguments)s 2841 X(are)s 2957 X(sent)s 3099 X(to)s 3185 X f.I 10 Z(syslog)s 3363 X f.R 10 Z(\(8\))s 3474 X(for)s 3586 X(audit)s 2256 X 3475 Y(purposes)s 2492 X(.)s 2256 X 3569 Y 2400 X(The)s 2536 X(most)s 2698 X(commonly)s 2983 X(-used)s 3160 X f.I 10 Z(ctlinnd)s 3379 X f.R 10 Z(command)s 3675 X(is)s 2256 X 3642 Y(``\257ush)s 2429 X(.'')s 2569 X(This)s 2744 X(directs)s 2979 X(the)s 3117 X(server)s 3336 X(to)s 3444 X(close)s 3638 X(the)s 2256 X 3715 Y(batch\256le)s 2511 X(that)s 2636 X(is)s 2705 X(open)s 2858 X(for)s 2959 X(a)s 3013 X(site,)s 3148 X(and)s 3268 X(is)s 3338 X(typically)s 3598 X(used)s 2256 X 3788 Y(as)s 2334 X(follows:)s 2256 X 3890 Y 2304 X f.CW 10 Z(mv)s 2424 X(batchfile)s 2824 X(batchfile)s 3184 X(.work)s 2256 X 3963 Y 2304 X(ctlinnd)s 2624 X(flush)s 2864 X(sitename)s 2256 X 4036 Y 2304 X(innxmit)s 2624 X(sitename)s 2984 X(batchfile)s 3344 X(.work)s 2256 X 4159 Y 2400 X f.R 10 Z(The)s 2538 X(\257ush)s 2701 X(command)s 2998 X(points)s 3195 X(out)s 3315 X(another)s 3550 X(differ-)s 2256 X 4232 Y(ence)s 2409 X(between)s 2662 X(INN)s 2810 X(and)s 2936 X(other)s 3103 X(Usenet)s 3318 X(software)s 3548 X(.)s 3616 X(The)s 2256 X 4305 Y(B)s 2323 X(News)s 2498 X f.I 10 Z(inews)s 2673 X f.R 10 Z(program)s 2921 X(needed)s 3133 X(no)s 3223 X(external)s 3463 X(locking)s 3687 X(\261)s 2256 X 4378 Y(\256les)s 2400 X(were)s 2562 X(opened)s 2786 X(and)s 2914 X(closed)s 3116 X(for)s 3224 X(a)s 3285 X(very)s 3434 X(short)s 3598 X(win-)s 2256 X 4451 Y(dow,)s 2413 X(the)s 2521 X(time)s 2667 X(needed)s 2882 X(to)s 2960 X(process)s 3187 X(one)s 3310 X(article)s 3479 X(.)s 3545 X(The)s 3676 X(C)s 2256 X 4524 Y(News)s 2431 X f.I 10 Z(relaynews)s 2724 X f.R 10 Z(could)s 2894 X(be)s 2979 X(running)s 3207 X(for)s 3306 X(a)s 3358 X(longer)s 3550 X(period)s 2256 X 4597 Y(of)s 2334 X(time)s 2454 X(.)s 2516 X(The)s 2643 X(only)s 2784 X(way)s 2918 X(to)s 2993 X(get)s 3098 X(access)s 3293 X(to)s 3368 X(a)s 3421 X(batch\256le)s 3675 X(is)s 2256 X 4670 Y(to)s 2333 X(either)s 2511 X(lock)s 2651 X(the)s 2758 X(entire)s 2936 X(news)s 3097 X(system,)s 3324 X(which)s 3511 X(is)s 3580 X(over-)s 2256 X 4743 Y(kill)s 2378 X(for)s 2488 X(the)s 2603 X(desired)s 2829 X(task,)s 2987 X(or)s 3075 X(to)s 3160 X(rename)s 3390 X(the)s 3505 X(\256le)s 3624 X(and)s 600 X 4967 Y f.B 10 Z(Summer)s 868 X('92)s 978 X(USENIX)s 1251 X(\261)s 1306 X(June)s 1465 X(8)s 1498 X(-June)s 1679 X(12,)s 1784 X(1992)s 1938 X(\261)s 1993 X(San)s 2122 X(Antonio,)s 2390 X(TX)s 3654 X(95)s 5280 Y pagebot %%Page: 96 4 pagetop stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 10 Z 360 X 215 Y(InterNetNews)s 779 X(.)s 796 X(.)s 813 X(.)s 3361 X(Salz)s 360 X 448 Y stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def f.R 10 Z(wait)s 510 X(until)s 667 X(the)s 783 X(original)s 1025 X(name)s 1204 X(shows)s 1404 X(up)s 1503 X(again)s 1648 X(.)s 1720 X(The)s 360 X 521 Y(INN)s 521 X(approach)s 808 X(is)s 897 X(more)s 1078 X(ef\256cient)s 1342 X(and)s 1482 X(conceptually)s 360 X 594 Y(cleaner)s 554 X(.)s 360 X 721 Y 875 X f.B 10 Z(Innd)s 1034 X(Structure)s 360 X 830 Y 504 X f.R 10 Z(When)s 687 X stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 10 Z(innd)s 829 X f.R 10 Z(starts)s 996 X(up)s 1087 X(it)s 1150 X(reads)s 1316 X(the)s 1423 X(active)s 1609 X(\256le)s 1720 X(into)s 360 X 903 Y(memory)s 582 X(.)s 657 X(An)s 773 X(array)s 945 X(of)s 1035 X(NEWSGROUP)s 1484 X(structures)s 1779 X(is)s 360 X 976 Y(created,)s 605 X(one)s 735 X(for)s 847 X(each)s 1005 X(newsgroup,)s 1348 X(that)s 1484 X(contains)s 1742 X(the)s 360 X 1049 Y(following)s 641 X(elements:)s 360 X 1138 Y 408 X stdencoding /NCourier /Courier RE /f.CW /NCourier findfont def f.CW 8 Z(char)s 600 X(*Name;)s 1048 X(/*)s 1144 X("comp)s 1304 X(.sources)s 1560 X(.unix)s 1752 X(*/)s 360 X 1198 Y 408 X(char)s 600 X(*Dir;)s 1048 X(/*)s 1144 X("comp/sources/u)s 1624 X(nix/")s 1816 X(*/)s 360 X 1258 Y 408 X(long)s 600 X(Last;)s 1048 X(/*)s 1144 X(0211)s 1304 X(*/)s 360 X 1318 Y 408 X(int)s 600 X(LastWidth;)s 1048 X(/*)s 1144 X(5)s 1208 X(*/)s 360 X 1378 Y 408 X(char)s 600 X(*LastString;)s 1048 X(/*)s 1144 X("00211)s 1336 X(.)s 1368 X(.)s 1400 X(.")s 1496 X(*/)s 360 X 1438 Y 408 X(char)s 600 X(*Rest;)s 1048 X(/*)s 1144 X("m\\n)s 1272 X(.)s 1304 X(.)s 1336 X(.")s 1432 X(*/)s 360 X 1498 Y 408 X(int)s 600 X(SiteCount;)s 1048 X(/*)s 1144 X(1)s 1208 X(*/)s 360 X 1558 Y 408 X(SITE)s 600 X(**Sites;)s 1048 X(/*)s 1144 X(defined)s 1400 X(below)s 1592 X(*/)s 360 X 1660 Y f.R 10 Z(The)s 499 X(C)s 578 X(comments)s 888 X(above)s 1082 X(show)s 1257 X(the)s 1374 X(data)s 1521 X(that)s 1658 X(would)s 360 X 1733 Y(generated)s 642 X(for)s 741 X(the)s 845 X(following)s 1126 X(line)s 1249 X(in)s 1323 X(the)s 1427 X(active)s 1610 X(\256le:)s 360 X 1835 Y 408 X f.CW 10 Z(comp)s 568 X(.sources)s 888 X(.unix)s 1128 X(00211)s 1368 X(00202)s 1608 X(m)s 360 X 1937 Y f.R 10 Z(The)s 491 X f.I 10 Z(Last)s 633 X f.R 10 Z(\256eld)s 779 X(speci\256es)s 1037 X(the)s 1146 X(name)s 1318 X(to)s 1397 X(be)s 1487 X(given)s 1662 X(to)s 1742 X(the)s 360 X 2010 Y(next)s 512 X(article)s 718 X(in)s 807 X(the)s 926 X(group)s 1080 X(.)s 1156 X(The)s 1297 X f.I 10 Z(LastString)s 1611 X f.R 10 Z(element)s 360 X 2083 Y(points)s 561 X(into)s 703 X(the)s 823 X(in)s 875 X(-memory)s 1158 X(copy)s 1326 X(of)s 1420 X(the)s 1541 X(\256le)s 1627 X(.)s 1705 X(This)s 360 X 2156 Y(number)s 589 X(is)s 660 X(carefully)s 924 X(formatted)s 1210 X(so)s 1295 X(that)s 1422 X(the)s 1530 X(\256le)s 1642 X(can)s 1761 X(be)s 360 X 2229 Y(memory)s 582 X(-mapped,)s 854 X(or)s 931 X(updated)s 1164 X(with)s 1305 X(a)s 1357 X(single)s 1539 X f.I 10 Z(write)s 1677 X f.R 10 Z(.)s 360 X 2323 Y 504 X(A)s 586 X(hash)s 742 X(table)s 907 X(into)s 1046 X(the)s 1163 X(structure)s 1432 X(array)s 1604 X(is)s 1684 X(built,)s 360 X 2396 Y(using)s 530 X(a)s 586 X(function)s 833 X(provided)s 1094 X(by)s 1185 X(Chris)s 1354 X(Torek)s 1538 X([Torek91])s 1807 X(.)s 360 X 2469 Y(The)s 492 X(hash)s 642 X(calculation)s 965 X(is)s 1038 X(very)s 1184 X(simple,)s 1408 X(yet)s 1518 X(empirically)s 360 X 2542 Y(it)s 441 X(gives)s 625 X(near)s 740 X(-uniform)s 1019 X(distribution)s 1327 X(.)s 1408 X(The)s 1554 X(secondary)s 360 X 2615 Y(key)s 480 X(is)s 549 X(the)s 655 X(highest)s 872 X(article)s 1065 X(number,)s 1309 X(so)s 1393 X(groups)s 1598 X(with)s 1742 X(the)s 360 X 2688 Y(most)s 512 X(traf\256c)s 694 X(tend)s 831 X(to)s 905 X(be)s 990 X(at)s 1061 X(the)s 1165 X(top)s 1272 X(of)s 1349 X(the)s 1453 X(bucket)s 1631 X(.)s 360 X 2782 Y 504 X(The)s 641 X(INN)s 792 X(equivalent)s 1104 X(of)s 1192 X(the)s 1307 X f.I 10 Z(sys)s 1423 X f.R 10 Z(\256le)s 1543 X(read)s 1692 X(next)s 1807 X(.)s 360 X 2855 Y(An)s 468 X(array)s 632 X(of)s 714 X(SITE)s 882 X(structures)s 1168 X(is)s 1239 X(created,)s 1476 X(one)s 1598 X(for)s 1701 X(each)s 360 X 2928 Y(site,)s 493 X(that)s 616 X(contains)s 861 X(the)s 965 X(following)s 1246 X(elements:)s 360 X 3030 Y 408 X f.CW 10 Z(BOOL)s 648 X(Sendit;)s 360 X 3103 Y 408 X(char)s 648 X(FileFlags[10];)s 360 X 3205 Y f.R 10 Z(The)s 521 X f.I 10 Z(FileFlags)s 839 X f.R 10 Z(array)s 1033 X(speci\256es)s 1321 X(what)s 1509 X(information)s 360 X 3278 Y(should)s 569 X(be)s 664 X(written)s 886 X(to)s 970 X(the)s 1084 X(site's)s 1258 X(data)s 1401 X(stream)s 1611 X(when)s 1786 X(it)s 360 X 3351 Y(receives)s 605 X(an)s 694 X(article)s 863 X(.)s 928 X(The)s 1058 X(subscription)s 1410 X(list)s 1519 X(for)s 1622 X(the)s 1730 X(site)s 360 X 3424 Y(is)s 445 X(then)s 600 X(parsed,)s 831 X(and)s 967 X(for)s 1084 X(all)s 1192 X(the)s 1314 X(newsgroup)s 1645 X(that)s 1786 X(it)s 360 X 3497 Y(recives,)s 601 X(the)s 717 X(matching)s 1001 X(NEWSGROUP)s 1450 X(structure)s 1719 X(will)s 360 X 3570 Y(contain)s 579 X(a)s 631 X(pointer)s 842 X(to)s 916 X(the)s 1020 X(SITE)s 1183 X(structure)s 1417 X(.)s 360 X 3664 Y 504 X(Using)s 700 X(these)s 875 X(two)s 1012 X(structures)s 1310 X(it)s 1386 X(is)s 1469 X(easy)s 1626 X(to)s 1716 X(step)s 360 X 3737 Y(through)s 588 X(how)s 724 X(an)s 809 X(article)s 1000 X(is)s 1067 X(propagated:)s 360 X 3833 Y 408 X f.CW 9 Z(extern)s 660 X(ARTDATA)s 948 X(*art;)s 360 X 3900 Y 408 X(extern)s 660 X(SITE)s 840 X(*Sites,)s 1128 X(*LastSite;)s 360 X 3967 Y 408 X(extern)s 660 X(int)s 804 X(nSites;)s 360 X 4034 Y 408 X(char)s 588 X(**pp;)s 360 X 4101 Y 408 X(SITE)s 588 X(*sp;)s 360 X 4168 Y 408 X(NEWSGROUP)s 768 X(*ng;)s 360 X 4235 Y 408 X(int)s 552 X(i;)s 360 X 4335 Y 408 X(while)s 624 X(\(*pp\))s 840 X({)s 360 X 4402 Y 480 X(ng)s 588 X(=)s 660 X(HashNewsgroup\(*)s 1200 X(pp++\);)s 360 X 4469 Y 480 X(if)s 588 X(\(ng)s 732 X(==)s 840 X(NULL\))s 360 X 4536 Y 552 X(continue;)s 360 X 4603 Y 480 X(AssignName\(ng\))s 984 X(;)s 360 X 4670 Y 480 X(for)s 624 X(\(i)s 732 X(=)s 804 X(0;)s 912 X(i)s 984 X(<)s 1056 X(ng)s 1128 X(->nSites;)s 1488 X(i++\))s 1668 X({)s 360 X 4737 Y 552 X(if)s 660 X(\(MeetsSiteCrite)s 1200 X(ra\(ng)s 1380 X(->Sites[i],)s 1812 X(art\)\))s 2016 X 442 Y 2280 X(ng)s 2352 X(->Sites[i])s 2712 X(->Sendit)s 3036 X(=)s 3108 X(TRUE;)s 2016 X 509 Y 2136 X(})s 2016 X 576 Y 2064 X(})s 2016 X 676 Y 2064 X(for)s 2208 X(\(sp)s 2352 X(=)s 2424 X(Sites;)s 2676 X(sp)s 2784 X(<)s 2856 X(LastSite;)s 3216 X(sp++\))s 3432 X({)s 2016 X 743 Y 2136 X(if)s 2244 X(\(!sp)s 2388 X(->Sendit\))s 2016 X 810 Y 2208 X(continue;)s 2016 X 877 Y 2136 X(for)s 2280 X(\(p)s 2388 X(=)s 2460 X(sp)s 2532 X(->FileFlags;)s 3000 X(*p;)s 3144 X(p++\))s 2016 X 944 Y 2208 X(switch)s 2460 X(\(*p\))s 2640 X({)s 2016 X 1011 Y 2208 X(case)s 2388 X('m':)s 2016 X 1078 Y 2280 X(/*)s 2388 X(Write)s 2604 X(Message)s 2856 X(-ID)s 3000 X(*/)s 2016 X 1145 Y 2208 X(case)s 2388 X('n':)s 2016 X 1212 Y 2280 X(/*)s 2388 X(Write)s 2604 X(filename)s 2928 X(*/)s 2016 X 1279 Y 2208 X 2208 X(.)s 2254 X(.)s 2300 X(.)s 2016 X 1346 Y 2208 X(})s 2016 X 1413 Y 2064 X(})s 2016 X 1515 Y f.R 10 Z(The)s 2144 X(ARTDATA)s 2486 X(structure)s 2744 X(contains)s 2992 X(information)s 3332 X(about)s 2016 X 1588 Y(the)s 2124 X(current)s 2339 X(article)s 2534 X(such)s 2682 X(as)s 2764 X(its)s 2854 X(size,)s 3002 X(the)s 3110 X(host)s 3246 X(that)s 3372 X(sent)s 2016 X 1661 Y(it,)s 2100 X(and)s 2225 X(so)s 2313 X(on)s 2379 X(.)s 2448 X(The)s 2582 X f.I 10 Z(MeetsSiteCriter)s 3008 X(ia)s 3090 X f.R 10 Z(function)s 3342 X(is)s 3417 X(an)s 2016 X 1734 Y(abstraction)s 2333 X(for)s 2433 X(the)s 2538 X(in)s 2590 X(-line)s 2736 X(tests)s 2879 X(that)s 3002 X(are)s 3106 X(done)s 3257 X(to)s 3331 X(see)s 3439 X(if)s 2016 X 1807 Y(an)s 2104 X(article)s 2298 X(really)s 2476 X(should)s 2679 X(be)s 2768 X(propagated)s 3090 X(to)s 3168 X(a)s 3224 X(site)s 3344 X(\(e)s 3396 X(.g)s 3446 X(.,)s 2016 X 1880 Y(checking)s 2313 X(the)s 2451 X(Path)s 2626 X(header)s 2860 X(as)s 2971 X(described)s 3282 X(above\))s 3463 X(.)s 2016 X 1953 Y f.I 10 Z(AssignName)s 2371 X f.R 10 Z(is)s 2438 X(described)s 2716 X(below)s 2879 X(.)s 2016 X 2047 Y 2160 X(At)s 2250 X(its)s 2337 X(core,)s 2493 X f.I 10 Z(innd)s 2635 X f.R 10 Z(is)s 2704 X(an)s 2791 X(I/O)s 2904 X(scheduler)s 3184 X(that)s 3309 X(makes)s 2016 X 2120 Y(callbacks)s 2289 X(when)s 2456 X f.I 10 Z(select)s 2621 X f.R 10 Z(\(2\))s 2721 X(has)s 2833 X(determined)s 3156 X(that)s 3279 X(there)s 3435 X(is)s 2016 X 2193 Y(activity)s 2245 X(on)s 2338 X(a)s 2395 X(descriptor)s 2662 X(.)s 2728 X(This)s 2874 X(is)s 2946 X(encapsulated)s 3319 X(in)s 3398 X(the)s 2016 X 2266 Y(CHANNEL)s 2368 X(structure,)s 2653 X(which)s 2850 X(has)s 2972 X(the)s 3087 X(following)s 3379 X(ele-)s 2016 X 2339 Y(ments:)s 2016 X 2441 Y 2064 X f.CW 10 Z(enum)s 2264 X(TYPE)s 2544 X(Type;)s 2016 X 2514 Y 2064 X(enum)s 2264 X(STATE)s 2544 X(State;)s 2016 X 2587 Y 2064 X(int)s 2544 X(fd;)s 2016 X 2660 Y 2064 X(FUNCPTR)s 2544 X(Reader;)s 2016 X 2733 Y 2064 X(FUNCPTR)s 2544 X(WriteDone;)s 2016 X 2806 Y 2064 X(BUFFER)s 2544 X(In;)s 2016 X 2879 Y 2064 X(BUFFER)s 2544 X(Out;)s 2016 X 3002 Y 2160 X f.R 10 Z(The)s 2293 X f.I 10 Z(Type)s 2452 X f.R 10 Z(\256eld)s 2600 X(is)s 2674 X(used)s 2826 X(for)s 2933 X(internal)s 3168 X(consistency)s 2016 X 3075 Y(checks)s 2198 X(.)s 2278 X(There)s 2475 X(four)s 2626 X(different)s 2897 X(types)s 3078 X(of)s 3173 X(channels)s 3447 X(\261)s 2016 X 3148 Y(local)s 2147 X(-accept,)s 2401 X(remote)s 2587 X(-accept,)s 2841 X(local)s 2972 X(-control)s 3226 X(\(used)s 3414 X(by)s 2016 X 3221 Y f.I 10 Z(ctlinnd)s f.R 10 Z(\))s 2251 X(and)s 2374 X(NNTP)s 2575 X(connection)s 2868 X(.)s 2933 X(Each)s 3093 X(type)s 3234 X(is)s 3305 X(imple-)s 2016 X 3294 Y(mented)s 2237 X(in)s 2313 X(anywhere)s 2596 X(from)s 2749 X(100)s 2872 X(to)s 2948 X(1200)s 3105 X(lines)s 3257 X(of)s 3337 X(code)s 3463 X(.)s 2016 X 3367 Y(The)s 2158 X f.I 10 Z(Reader)s 2389 X f.R 10 Z(and)s 2523 X f.I 10 Z(WriteDone)s 2855 X f.R 10 Z(function)s 3115 X(pointers,)s 3384 X(and)s 2016 X 3440 Y(the)s 2128 X f.I 10 Z(State)s 2292 X f.R 10 Z(enumeration)s 2657 X(are)s 2770 X(used)s 2923 X(for)s 3031 X(protocol)s 3253 X(-speci\256c)s 2016 X 3513 Y(data)s 2128 X(.)s 2194 X(For)s 2312 X(example,)s 2582 X f.I 10 Z(State)s 2742 X f.R 10 Z(\256eld)s 2887 X(is)s 2958 X(used)s 3106 X(by)s 3198 X(the)s 3306 X(NNTP)s 2016 X 3586 Y(channel)s 2252 X(code)s 2406 X(to)s 2487 X(determine)s 2784 X(whether)s 3028 X(the)s 3139 X(site)s 3262 X(is)s 3336 X(send-)s 2016 X 3659 Y(ing)s 2126 X(an)s 2214 X(NNTP)s 2413 X(command)s 2701 X(or)s 2780 X(an)s 2867 X(article)s 3036 X(.)s 3099 X(The)s 3227 X f.I 10 Z(BUFFER)s 2016 X 3732 Y f.R 10 Z(datatype)s 2288 X(contains)s 2557 X(sized)s 2741 X(reusable)s 3010 X(I/O)s 3145 X(buffers)s 3379 X(that)s 2016 X 3805 Y(grow)s 2174 X(as)s 2252 X(needed)s 2441 X(.)s 2016 X 3899 Y 2160 X(At)s 2274 X(start)s 2437 X(time)s 2604 X f.I 10 Z(innd)s 2770 X f.R 10 Z(calls)s 2942 X f.I 10 Z(getdtablesize)s 3303 X f.R 10 Z(\(2\))s 3428 X(to)s 2016 X 3972 Y(create)s 2221 X(an)s 2328 X(array)s 2509 X(of)s 2608 X(channels)s 2886 X(that)s 3031 X(can)s 3168 X(be)s 3275 X(directly)s 2016 X 4045 Y(indexed)s 2249 X(by)s 2337 X(descriptor)s 2604 X(.)s 2016 X 4139 Y 2160 X(The)s 2286 X(code)s 2434 X(to)s 2508 X(listen)s 2676 X(on)s 2765 X(the)s 2870 X(NNTP)s 3067 X(port)s 3197 X(is)s 3265 X(show)s 3428 X(in)s 2016 X 4212 Y(Figure)s 2218 X(3)s 2251 X(.)s 2318 X(When)s 2505 X(a)s 2563 X(host)s 2702 X(connects)s 2964 X(to)s 3044 X(the)s 3154 X(NNTP)s 3356 X(port,)s 2016 X 4285 Y f.I 10 Z(select)s 2181 X f.R 10 Z(\(2\))s 2293 X(will)s 2433 X(report)s 2627 X(activity)s 2864 X(on)s 2965 X(the)s 3082 X(descriptor)s 3384 X(and)s 2016 X 4358 Y(call)s 2141 X f.I 10 Z(RemoteReader)s 2561 X f.R 10 Z(which)s 2750 X(will)s 2881 X(accept)s 3079 X(the)s 3187 X(connection)s 2016 X 4431 Y(and)s 2140 X(possibly)s 2390 X(create)s 2580 X(\256ll)s 2684 X(in)s 2765 X(a)s 2824 X(new)s 2964 X(CHANNEL)s 3311 X(out)s 3425 X(of)s 2016 X 4504 Y(the)s 2120 X(resultant)s 2373 X(descriptor)s 2640 X(.)s 2016 X 4598 Y 2160 X(It)s 2225 X(took)s 2367 X(a)s 2421 X(bit)s 2516 X(of)s 2595 X(effort)s 2767 X(to)s 2843 X(write)s 3006 X(the)s 3113 X(callback)s 3362 X(loop)s 2016 X 4671 Y(so)s 2103 X(that)s 2232 X(it)s 2298 X(was)s 2430 X(fair)s 2551 X(\261)s 2612 X(i)s 2631 X(.e)s 2678 X(.,)s 2740 X(so)s 2826 X(that)s 2954 X(the)s 3063 X(lowest)s 3265 X(descrip-)s 2016 X 4744 Y(tors)s 2139 X(did)s 2247 X(not)s 2355 X(get)s 2461 X(priority)s 2685 X(treatment)s 2939 X(.)s 3002 X(The)s 3130 X(problem)s 3376 X(was)s 360 X 4967 Y f.B 10 Z(96)s 1598 X(Summer)s 1866 X('92)s 1976 X(USENIX)s 2249 X(\261)s 2304 X(June)s 2463 X(8)s 2496 X(-June)s 2677 X(12,)s 2782 X(1992)s 2936 X(\261)s 2991 X(San)s 3120 X(Antonio,)s 3388 X(TX)s 5280 Y pagebot %%Page: 97 5 pagetop stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 10 Z 600 X 215 Y(Salz)s 3250 X(InterNetNews)s 3669 X(.)s 3686 X(.)s 3703 X(.)s 600 X 448 Y stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def f.R 10 Z(complicated)s 966 X(because)s 1216 X(other)s 1391 X(parts)s 1559 X(of)s 1652 X(the)s 1771 X(server)s 1971 X(can)s 600 X 521 Y(add)s 725 X(and)s 850 X(remove)s 1079 X(themselves)s 1406 X(from)s 1565 X(the)s 1677 X stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 10 Z(select)s 1842 X f.R 10 Z(\(2\))s 1949 X(read)s 600 X 594 Y(and)s 718 X(write)s 878 X(mask,)s 1058 X(as)s 1136 X(needed)s 1325 X(.)s 600 X 2645 Y 3120 0 l 600 X 2733 Y 648 X stdencoding /NCourier /Courier RE /f.CW /NCourier findfont def f.CW 10 Z(int)s 600 X 2813 Y 648 X(RemoteReader\(cp)s 1248 X(\))s 600 X 2893 Y 808 X(CHANNEL)s 1128 X(*cp;)s 600 X 2973 Y 648 X({)s 600 X 3053 Y 808 X(int)s 968 X(newfd;)s 600 X 3133 Y 808 X(struct)s 1088 X(sockadr_in)s 1528 X(remote;)s 600 X 3213 Y 808 X(int)s 968 X(remsize;)s 600 X 3333 Y 808 X(newfd)s 1048 X(=)s 1128 X(accept\(cp)s 1488 X(->fd,)s 1728 X(&remote,)s 2088 X(&remsize\);)s 600 X 3413 Y 808 X(if)s 928 X(\(InAccessFile\(r)s 1528 X(emsocket\)\))s 600 X 3493 Y 968 X(CHANcreate\(new)s 1528 X(fd,)s 1688 X(TYPEnntp,)s 2088 X(STATEgetcmd,)s 2608 X(NCreader,)s 3008 X(NCwritedone\);)s 600 X 3573 Y 808 X(else)s 1008 X({)s 600 X 3653 Y 968 X(ForkAndExec\("n)s 1528 X(nrpd",)s 1808 X(newfd\);)s 600 X 3733 Y 968 X(close\(newfd\);)s 600 X 3813 Y 808 X(})s 600 X 3893 Y 648 X(})s 600 X 4013 Y 648 X(int)s 600 X 4093 Y 648 X(RemoteSetup\(\))s 600 X 4173 Y 648 X({)s 600 X 4253 Y 808 X(int)s 968 X(fd;)s 600 X 4413 Y 808 X(fd)s 928 X(=)s 1008 X(GetSocketBoundT)s 1608 X(oNNTPPort\(\);)s 600 X 4493 Y 808 X(CHANcreate\(fd,)s 1408 X(TYPEremote,)s 1888 X(STATElisten,)s 2408 X(RemoteReader,)s 2968 X(NULL\);)s 600 X 4573 Y 648 X(})s 600 X 4685 Y 1630 X f.B 10 Z(Figure)s 1842 X(3)s f.R 10 Z(:)s 1938 X(Listening)s 2213 X(on)s 2301 X(an)s 2386 X(NNTP)s 2582 X(port)s 600 X 688 Y 744 X(Once)s 909 X(the)s 1016 X(NNTP)s 1215 X(channel)s 1448 X(has)s 1562 X(been)s 1713 X(created)s 1932 X(for)s 2034 X(a)s 600 X 761 Y(site,)s 741 X(the)s 853 X(server)s 1046 X(is)s 1121 X(ready)s 1299 X(to)s 1380 X(accept)s 1581 X(articles)s 1805 X(from)s 1963 X(that)s 600 X 834 Y(site)s 694 X(.)s 763 X(The)s 897 X(reader)s 1094 X(function)s 1346 X(for)s 1453 X(NNTP)s 1658 X(channels)s 1923 X(reads)s 600 X 907 Y(as)s 683 X(much)s 858 X(data)s 997 X(as)s 1080 X(is)s 1152 X(available)s 1422 X(from)s 1578 X(the)s 1687 X(descriptor)s 1954 X(.)s 2020 X(If)s 600 X 980 Y(it)s 661 X(is)s 729 X(in)s 804 X(``get)s 953 X(a)s 1006 X(command'')s 1336 X(state,)s 1500 X(it)s 1562 X(looks)s 1730 X(for)s 1831 X(a)s 1885 X(simple)s 600 X 1053 Y(\\r\\n)s 720 X(terminator;)s 1045 X(if)s 1112 X(it)s 1176 X(is)s 1247 X(in)s 1325 X(``reading)s 1595 X(an)s 1684 X(article'')s 1923 X(state,)s 600 X 1126 Y(it)s 663 X(looks)s 832 X(for)s 934 X(a)s 989 X(``\\r\\n)s 1126 X(.\\r\\n'')s 1305 X(terminator)s 1584 X(.)s 1648 X(If)s 1718 X(not)s 1829 X(found,)s 2026 X(it)s 600 X 1199 Y(just)s 725 X(returns;)s 957 X(the)s 1067 X(data)s 1207 X(will)s 1340 X(become)s 1576 X(available)s 1847 X(at)s 1923 X(some)s 600 X 1272 Y(point)s 737 X(.)s 812 X(If)s 892 X(the)s 1010 X(terminator)s 1325 X(is)s 1406 X(found,)s 1614 X(it)s 1689 X(processes)s 1982 X(the)s 600 X 1345 Y(data)s 742 X(in)s 824 X(the)s 936 X(buffer)s 1098 X(.)s 1167 X(For)s 1289 X(\256ling)s 1460 X(an)s 1552 X(article,)s 1767 X(this)s 1893 X(means)s 600 X 1418 Y(cleaning)s 855 X(up)s 950 X(the)s 1061 X(NNTP)s 1264 X(text)s 1394 X(escapes,)s 1645 X(and)s 1770 X(calling)s 1982 X(the)s 600 X 1491 Y(article)s 791 X(abstraction)s 1107 X(to)s 1181 X(process)s 1403 X(the)s 1507 X(article)s 1676 X(.)s 600 X 1585 Y 744 X(Processing)s 1062 X(the)s 1173 X(article)s 1371 X(is)s 1445 X(the)s 1556 X(largest)s 1764 X(single)s 1954 X(rou-)s 600 X 1658 Y(tine)s 738 X(in)s 827 X(the)s 946 X(server)s 1109 X(.)s 1185 X(The)s 1326 X f.I 10 Z(AssignName)s 1696 X f.R 10 Z(shown)s 1905 X(above)s 600 X 1731 Y(increments)s 926 X(the)s 1040 X(high)s 1158 X(-water)s 1361 X(mark)s 1531 X(for)s 1641 X(the)s 1756 X(newsgroup)s 2047 X(.)s 600 X 1804 Y(If)s 670 X(the)s 778 X(article)s 973 X(has)s 1087 X(already)s 1309 X(been)s 1460 X(written)s 1675 X(to)s 1752 X(disk,)s 1905 X(a)s 1960 X(link)s 600 X 1877 Y(is)s 680 X(made)s 860 X(under)s 1046 X(the)s 1163 X(new)s 1309 X(name)s 1454 X(.)s 1528 X(\(Symbolic)s 1841 X(links,)s 2023 X(if)s 600 X 1950 Y(available,)s 889 X(can)s 1011 X(be)s 1102 X(used)s 1252 X(if)s 1321 X(the)s 1431 X(spool)s 1603 X(area)s 1743 X(spans)s 1919 X(parti-)s 600 X 2023 Y(tions)s 730 X(.\))s 846 X(If)s 945 X(the)s 1082 X(article)s 1306 X(has)s 1450 X(not)s 1590 X(been)s 1771 X(written,)s 2034 X(a)s 600 X 2096 Y f.I 10 Z(struct)s 775 X(iovec)s 949 X f.R 10 Z(array)s 1118 X(is)s 1195 X(set)s 1302 X(up)s 1399 X(as)s 1486 X(shown)s 1690 X(below,)s 1901 X(where)s 600 X 2169 Y(vertical)s 824 X(bars)s 957 X(separate)s 1199 X(each)s 1344 X(iovec)s 1511 X(element:)s 600 X 2271 Y 648 X f.CW 10 Z(First)s 888 X(headers)s 1168 X(.)s 1208 X(.)s 1248 X(.)s 600 X 2344 Y 648 X(Path:)s 888 X(|LOCAL_PATH_PRE)s 1488 X(FIX|rest)s 1848 X(of)s 1968 X(path)s 2128 X(.)s 2168 X(.)s 2208 X(.)s 600 X 2417 Y 648 X(Second)s 928 X(headers)s 1208 X(.)s 1248 X(.)s 1288 X(.)s 600 X 2490 Y 648 X(|XREF_HEADER|)s 600 X 2599 Y 648 X(|Article)s 1008 X(body)s 1168 X(.)s 2256 X 448 Y f.R 10 Z(This)s 2398 X(is)s 2467 X(a)s 2521 X(very)s 2663 X(fast)s 2784 X(way)s 2919 X(of)s 2998 X(writing)s 3215 X(the)s 3321 X(article)s 3514 X(to)s 3590 X(disk;)s 2256 X 521 Y(it)s 2323 X(avoids)s 2526 X(extra)s 2689 X(memory)s 2940 X(copies,)s 3157 X(and)s 3282 X(is)s 3355 X(only)s 3501 X(possible)s 2256 X 594 Y(because)s 2491 X(the)s 2596 X(entire)s 2772 X(article)s 2964 X(is)s 3032 X(kept)s 3170 X(in)s 3245 X(memory)s 3491 X(until)s 3638 X(the)s 2256 X 667 Y(last)s 2372 X(moment)s 2591 X(.)s 2256 X 794 Y 2804 X f.B 10 Z(Future)s 3023 X(work)s 2256 X 903 Y 2400 X f.R 10 Z(RFC)s 2553 X(977)s 2680 X(follows)s 2908 X(the)s 3018 X(SMTP)s 3220 X(protocol)s 3470 X(for)s 3576 X(send-)s 2256 X 976 Y(ing)s 2374 X(text:)s 2549 X(line)s 2683 X(are)s 2798 X(terminated)s 3118 X(with)s 3269 X(\\r\\n,)s 3411 X(a)s 3473 X(period)s 3675 X(is)s 2256 X 1049 Y(placed)s 2467 X(before)s 2673 X(all)s 2777 X(lines)s 2940 X(starting)s 3177 X(with)s 3333 X(a)s 3400 X(period,)s 3624 X(and)s 2256 X 1122 Y(data)s 2397 X(is)s 2471 X(terminated)s 2786 X(with)s 2933 X(a)s 2991 X(line)s 3120 X(consisting)s 3419 X(of)s 3502 X(a)s 3560 X(single)s 2256 X 1195 Y(period)s 2464 X([Postel82])s 2738 X(.)s 2815 X f.I 10 Z(Innd)s 2974 X f.R 10 Z(must)s 3142 X(scan)s 3299 X(the)s 3419 X(text)s 3558 X(of)s 3652 X(all)s 2256 X 1268 Y(articles)s 2495 X(it)s 2577 X(receives)s 2840 X(and)s 2979 X(convert)s 3222 X(them)s 3399 X(to)s 3494 X(standard)s 2256 X 1341 Y f.R 8 Z(UNIX)s 2410 X f.R 10 Z(format)s 2588 X(.)s 2649 X(On)s 2752 X(the)s 2857 X(transmission)s 3218 X(side,)s 3366 X f.I 10 Z(innxmit)s 3590 X f.R 10 Z(must)s 2256 X 1414 Y(read)s 2398 X(the)s 2507 X(articles)s 2729 X(a)s 2786 X(line)s 2914 X(at)s 2990 X(a)s 3047 X(time)s 3194 X(in)s 3272 X(order)s 3438 X(to)s 3516 X(add)s 3638 X(the)s 2256 X 1487 Y(extra)s 2425 X(data)s 2537 X(.)s 2611 X(If)s 2690 X(all)s 2793 X(newsreading)s 3165 X(is)s 3246 X(done)s 3411 X(via)s 3529 X(NNTP,)s 2256 X 1560 Y(then)s 2403 X(articles)s 2630 X(could)s 2809 X(be)s 2903 X(stored)s 3097 X(directly)s 3333 X(in)s 3416 X(NNTP)s 3621 X(for-)s 2256 X 1633 Y(mat,)s 2401 X(and)s 2524 X f.I 10 Z(innxmit)s 2752 X f.R 10 Z(could)s 2928 X(read)s 3071 X(and)s 3195 X(write)s 3361 X(the)s 3471 X(article)s 3668 X(in)s 2256 X 1706 Y(two)s 2388 X(system)s 2606 X(calls)s 2730 X(.)s 2801 X(The)s 2936 X f.I 10 Z(innd)s 3085 X f.R 10 Z(gains)s 3257 X(would)s 3454 X(not)s 3570 X(be)s 3664 X(as)s 2256 X 1779 Y(dramatic,)s 2536 X(but)s 2649 X(tests)s 2797 X(show)s 2965 X(it)s 3031 X(would)s 3226 X(still)s 3357 X(be)s 3449 X(somewhat)s 2256 X 1852 Y(measurable)s 2561 X(.)s 2256 X 1946 Y 2400 X(There)s 2580 X(is)s 2649 X(no)s 2739 X(NNTP)s 2937 X(``TURN'')s 3230 X(command,)s 3535 X(so)s 3619 X(that)s 2256 X 2019 Y(a)s 2315 X(single)s 2504 X(connection)s 2826 X(cannot)s 3033 X(be)s 3125 X(used)s 3276 X(for)s 3381 X(bidirectional)s 2256 X 2092 Y(article)s 2460 X(transfer)s 2664 X(.)s 2738 X(Turn)s 2867 X(-around)s 3108 X(is)s 3189 X(very)s 3343 X(successful)s 3654 X(on)s 2256 X 2165 Y(UUCP)s 2464 X(over)s 2613 X(conventional)s 2989 X(phone)s 3182 X(lines,)s 3356 X(but)s 3471 X(seems)s 3665 X(of)s 2256 X 2238 Y(limited)s 2491 X(use)s 2625 X(on)s 2736 X(higher)s 2906 X(-performance)s 3310 X(network)s 3573 X(links)s 3703 X(.)s 2256 X 2311 Y(The)s 2391 X(SMTP)s 2596 X(protocol)s 2849 X(has)s 2969 X(had)s 3096 X(a)s 3157 X(``TURN'')s 3457 X(command)s 2256 X 2384 Y(since)s 2426 X(its)s 2522 X(inception,)s 2820 X(but)s 2937 X(it)s 3007 X(has)s 3129 X(received)s 3389 X(no)s 3488 X(practical)s 2256 X 2457 Y(use)s 2345 X(.)s 2408 X(Several)s 2633 X(people)s 2835 X(\256nd)s 2962 X(the)s 3067 X(idea)s 3202 X(of)s 3280 X(adding)s 3484 X(outgoing)s 2256 X 2530 Y(transfer)s 2491 X(to)s 2574 X f.I 10 Z(innd)s 2723 X f.R 10 Z(attractive,)s 3022 X(since)s 3192 X(it)s 3262 X(is)s 3339 X(already)s 3568 X(struc-)s 2256 X 2603 Y(tured)s 2435 X(for)s 2554 X(multi)s 2696 X(-host)s 2871 X(I/O)s 3002 X(and)s 3140 X(the)s 3263 X(idea)s 3416 X(of)s 3512 X(caching)s 600 X 4967 Y f.B 10 Z(Summer)s 868 X('92)s 978 X(USENIX)s 1251 X(\261)s 1306 X(June)s 1465 X(8)s 1498 X(-June)s 1679 X(12,)s 1784 X(1992)s 1938 X(\261)s 1993 X(San)s 2122 X(Antonio,)s 2390 X(TX)s 3654 X(97)s 5280 Y pagebot %%Page: 98 6 pagetop stdencoding /NTimes-Bold /Times-Bold RE /f.B /NTimes-Bold findfont def f.B 10 Z 360 X 215 Y(InterNetNews)s 779 X(.)s 796 X(.)s 813 X(.)s 3361 X(Salz)s 360 X 448 Y stdencoding /NTimes-Roman /Times-Roman RE /f.R /NTimes-Roman findfont def f.R 10 Z(recent)s 561 X(articles)s 794 X(in)s 884 X(memory)s 1144 X(has)s 1271 X(its)s 1373 X(appeal)s 1548 X(.)s 1625 X(Adding)s 360 X 521 Y(outgoing)s 639 X(transfer)s 886 X(to)s 981 X stdencoding /NTimes-Italic /Times-Italic RE /f.I /NTimes-Italic findfont def f.I 10 Z(innd)s 1141 X f.R 10 Z(would)s 1349 X(take)s 1503 X(a)s 1575 X(moderate)s 360 X 594 Y(effort)s 508 X(.)s 360 X 721 Y 655 X f.B 10 Z(Conclusions)s 1022 X(and)s 1151 X(Comparisons)s 360 X 830 Y 504 X f.R 10 Z(The)s 630 X(InterNetNews)s 1027 X(architecture)s 1367 X(works)s 1529 X(.)s 1591 X(Pro\256ling)s 360 X 903 Y(a)s 427 X(production)s 751 X(installation)s 1086 X(for)s 1199 X(24)s 1301 X(hours)s 1484 X(showed)s 1723 X(that)s 360 X 976 Y f.I 10 Z(open)s 500 X f.R 10 Z(\(2\))s 607 X(accounted)s 908 X(for)s 1015 X(10%)s 1167 X(of)s 1253 X(the)s 1366 X(run)s 1485 X(time)s 1605 X(.)s 1675 X(Since)s 360 X 1049 Y(the)s 465 X(server)s 651 X(only)s 792 X(does)s 937 X(one)s 1056 X f.I 10 Z(open)s 1196 X f.R 10 Z(\(2\))s 1296 X(per)s 1404 X(article,)s 1612 X(it)s 1672 X(is)s 1739 X(not)s 360 X 1122 Y(clear)s 534 X(if)s 618 X(any)s 757 X(other)s 937 X(performance)s 1317 X(tuning)s 1530 X(is)s 1618 X(needed)s 1807 X(.)s 360 X 1195 Y(The)s 490 X(pro\256ling)s 745 X(overhead)s 1015 X(accounted)s 1311 X(for)s 1413 X(5%)s 1527 X(of)s 1607 X(the)s 1714 X(run-)s 360 X 1268 Y(time)s 480 X(.)s 360 X 1362 Y 504 X(Several)s 759 X(optimizations)s 1178 X(are)s 1314 X(available)s 1612 X(because)s 360 X 1435 Y(there)s 525 X(is)s 601 X(only)s 750 X(one)s 877 X(process,)s 1125 X(and)s 1252 X(because)s 1495 X(it)s 1563 X(is)s 1638 X(always)s 360 X 1508 Y(running)s 566 X(.)s 650 X(For)s 787 X(example,)s 1076 X(avoiding)s 1354 X(duplicates)s 1671 X(is)s 1761 X(an)s 360 X 1581 Y(integral)s 590 X(part)s 719 X(of)s 799 X(the)s 906 X(server)s 1069 X(.)s 1133 X(If)s 1201 X(a)s 1255 X(second)s 1464 X(site)s 1582 X(offers)s 1761 X(an)s 360 X 1654 Y(article)s 551 X(while)s 723 X(a)s 776 X(\256rst)s 903 X(site)s 1020 X(is)s 1088 X(sending)s 1318 X(it,)s 1396 X(the)s 1501 X(NNTP)s 1698 X(code)s 360 X 1727 Y(will)s 501 X(put)s 622 X(the)s 739 X(channel)s 982 X(to)s 1069 X(``sleep'')s 1330 X(for)s 1442 X(a)s 1507 X(short)s 1675 X(while)s 360 X 1800 Y(before)s 558 X(replying)s 808 X(to)s 888 X(the)s 998 X(second)s 1212 X(offer)s 1341 X(.)s 1409 X(This)s 1557 X(is)s 1631 X(usually)s 360 X 1873 Y(enough)s 584 X(time)s 733 X(to)s 813 X(have)s 967 X(the)s 1077 X(\256rst)s 1209 X(site)s 1331 X(\256nish)s 1507 X(sending)s 1742 X(the)s 360 X 1946 Y(article,)s 572 X(reducing)s 831 X(the)s 939 X(number)s 1168 X(of)s 1249 X(duplicates)s 1547 X(from)s 1703 X(hun-)s 360 X 2019 Y(dreds)s 526 X(to)s 600 X(nearly)s 789 X(none,)s 957 X(with)s 1098 X(no)s 1186 X(external)s 1424 X(programs)s 1675 X(.)s 360 X 2113 Y 504 X(Since)s 682 X(the)s 793 X(server)s 985 X(is)s 1059 X(always)s 1274 X(running,)s 1526 X(the)s 1638 X(system)s 360 X 2186 Y(has)s 495 X(a)s 571 X(much)s 765 X(smoother)s 1059 X(performance)s 1442 X(curve)s 1590 X(.)s 1675 X(As)s 1794 X(a)s 360 X 2259 Y(result,)s 548 X(it)s 608 X(``feels'')s 845 X(much)s 1015 X(faster)s 1186 X(to)s 1260 X(users)s 1397 X(.)s 360 X 2353 Y 504 X(Another)s 754 X(unexpected)s 1090 X(bene\256t)s 1304 X(is)s 1381 X(that)s 1514 X(articles)s 1742 X(are)s 360 X 2426 Y(accepted)s 620 X(or)s 700 X(rejected)s 938 X(synchronously)s 1325 X(.)s 1389 X(A)s 1461 X(user)s 1596 X(can)s 1713 X(post)s 360 X 2499 Y(an)s 456 X(article,)s 675 X(and)s 804 X(by)s 903 X(the)s 1018 X(time)s 1171 X(their)s 1327 X(posting)s 1556 X(agent)s 1735 X(has)s 360 X 2572 Y(returned,)s 632 X(it)s 703 X(has)s 825 X(been)s 984 X(written)s 1207 X(to)s 1292 X(the)s 1407 X(spool)s 1583 X(directory)s 360 X 2645 Y(and)s 486 X(queued)s 708 X(for)s 815 X(remote)s 1031 X(transfer)s 1235 X(.)s 1304 X(If)s 1379 X(there)s 1544 X(is)s 1620 X(a)s 1681 X(prob-)s 360 X 2718 Y(lem)s 494 X(such)s 649 X(as)s 737 X(having)s 950 X(an)s 1045 X(illegal)s 1246 X(newsgroup)s 1569 X(speci\256ed,)s 360 X 2791 Y(the)s 464 X(user)s 597 X(founds)s 799 X(out)s 906 X(immediately)s 1242 X(.)s 360 X 2885 Y 504 X(The)s 651 X(design)s 868 X(of)s 966 X(the)s 1091 X(server)s 1297 X(seems)s 1504 X(to)s 1599 X(be)s 1706 X(very)s 360 X 2958 Y(good,)s 544 X(split)s 695 X(into)s 834 X(abstractions)s 1188 X(that)s 1323 X(are)s 1439 X(very)s 1591 X(indepen-)s 360 X 3031 Y(dant)s 475 X(.)s 559 X(For)s 696 X(example,)s 985 X(sites)s 1150 X(have)s 1321 X(no)s 1432 X(knowledge)s 1769 X(of)s 360 X 3104 Y(incomming)s 689 X(NNTP)s 888 X(connections)s 1207 X(.)s 1271 X(Using)s 1455 X(callbacks)s 1730 X(lets)s 360 X 3177 Y(each)s 505 X(portion)s 719 X(of)s 797 X(the)s 902 X(server)s 1088 X(safely)s 1271 X(do)s 1360 X(I/O)s 1472 X(without)s 1699 X(wor-)s 360 X 3250 Y(rying)s 531 X(that)s 663 X(it)s 732 X(might)s 919 X(affect)s 1103 X(other)s 1271 X(parts)s 1401 X(.)s 1471 X(Much)s 1657 X(of)s 1742 X(the)s 360 X 3323 Y(Usenet)s 581 X(processing)s 902 X(becomes)s 1172 X(trivial)s 1369 X(when)s 1549 X(serialized,)s 360 X 3396 Y(such)s 504 X(as)s 582 X(access)s 776 X(to)s 850 X(the)s 954 X(history)s 1161 X(\256le)s 1247 X(.)s 360 X 3490 Y 504 X(The)s 639 X(design)s 844 X(has)s 964 X(also)s 1103 X(led)s 1216 X(to)s 1299 X(a)s 1360 X(fairly)s 1536 X(small)s 1714 X(pro-)s 360 X 3563 Y(gram:)s 572 X(it)s 644 X(is)s 723 X(under)s 908 X(13,000)s 1124 X(lines,)s 1302 X(and)s 1432 X(about)s 1614 X(20%)s 1769 X(of)s 360 X 3636 Y(them)s 518 X(are)s 624 X(comments)s 899 X(.)s 963 X(This)s 1107 X(compares)s 1388 X(favorable)s 1665 X(to)s 1742 X(the)s 360 X 3709 Y(7,400)s 542 X(lines)s 702 X(in)s 786 X(the)s 900 X(equivalent)s 1211 X(C)s 1287 X(News)s 1471 X(program)s 1728 X(and)s 360 X 3782 Y(the)s 472 X(7,600)s 651 X(lines)s 808 X(in)s 890 X(the)s 1002 X(NNTP)s 1206 X(reference)s 1485 X(implementa-)s 360 X 3855 Y(tion)s 464 X(.)s 360 X 3982 Y 925 X f.B 10 Z(Availability)s 360 X 4091 Y 504 X f.R 10 Z(The)s 637 X(INN)s 784 X(package)s 1033 X(is)s 1108 X(freely)s 1294 X(redistributable)s 1681 X(,)s 1728 X(and)s 360 X 4164 Y(is)s 439 X(available)s 716 X(for)s 827 X(anonymous)s 1167 X(FTP)s 1316 X(from)s 1479 X(ftp)s 1553 X(.uu)s 1636 X(.net)s 1768 X(as)s 360 X 4237 Y(~ftp/news/inn)s 730 X(.tar)s 818 X(.Z)s 876 X(.)s 956 X(It)s 1038 X(is)s 1124 X(discussed)s 1421 X(in)s 1514 X(the)s 1638 X(Usenet)s 360 X 4310 Y(newsgroups)s 699 X(news)s 836 X(.software)s 1083 X(.nntp)s 1240 X(and)s 1358 X(news)s 1495 X(.software)s 1742 X(.b)s 1792 X(.)s 360 X 4437 Y 935 X f.B 10 Z(References)s 360 X 4546 Y f.R 10 Z([Adams87])s 681 X(Rick)s 835 X(Adams,)s 1069 X(Mark)s 1241 X(Horton,)s 1474 X f.I 10 Z(Standard)s 1746 X(for)s 360 X 4619 Y 504 X(Interchange)s 850 X(of)s 926 X(USENET)s 1194 X(Messages)s f.R 10 Z(,)s 1494 X(Request)s 1732 X(For)s 360 X 4692 Y 504 X(Comments)s 825 X(1036,)s 1006 X(Marina)s 1232 X(del)s 1347 X(Rey,)s 1504 X(CA:)s 1670 X(Infor-)s 360 X 4765 Y 504 X(mation)s 712 X(Sciences)s 969 X(Institute,)s 1228 X(1987)s 1360 X(.)s 2016 X 448 Y([Adams92])s 2337 X(Rick)s 2493 X(Adams,)s 2729 X f.I 10 Z(Total)s 2900 X(traf\256c)s 3091 X(through)s 3332 X(uunet)s 2016 X 521 Y 2160 X(for)s 2312 X(the)s 2468 X(last)s 2638 X(2)s 2744 X(weeks)s f.R 10 Z(,)s 2994 X(Usenet)s 3253 X(message)s 2016 X 594 Y 2160 X(<<1992Apr8)s 2504 X(.193050)s 2719 X(.8963@uunet)s 3077 X(.uu)s 3160 X(.net>)s 3428 X(in)s 2016 X 667 Y 2160 X f.I 10 Z(news)s 2293 X(.lists)s f.R 10 Z(,)s 2458 X(April,)s 2638 X(1992)s 2770 X(.)s 2016 X 747 Y([Collyer87])s 2348 X(Geoff)s 2530 X(Collyer)s 2758 X(and)s 2882 X(Henry)s 3076 X(Spencer,)s 3336 X f.I 10 Z(News)s 2016 X 820 Y 2160 X(Need)s 2329 X(not)s 2446 X(be)s 2541 X(Slow)s f.R 10 Z(,)s 2719 X(Usenix)s 2939 X(Winter)s 3156 X(Conference,)s 2016 X 893 Y 2160 X(1987)s 2292 X(.)s 2016 X 973 Y([Crocker82])s 2362 X(David)s 2547 X(H)s 2595 X(.)s 2634 X(Crocker,)s 2887 X f.I 10 Z(Standard)s 3152 X(for)s 3253 X(the)s 3358 X(For-)s 2016 X 1046 Y 2160 X(mat)s 2291 X(of)s 2374 X(ARPA)s 2569 X(Internet)s 2812 X(Text)s 2958 X(Messages)s f.R 10 Z(,)s 3265 X(Request)s 2016 X 1119 Y 2160 X(For)s 2304 X(Comments)s 2645 X(822,)s 2813 X(Marina)s 3058 X(del)s 3192 X(Rey,)s 3369 X(CA:)s 2016 X 1192 Y 2160 X(Information)s 2500 X(Sciences)s 2757 X(Institute,)s 3016 X(1982)s 3148 X(.)s 2016 X 1272 Y([Kantor86])s 2333 X(Brian)s 2539 X(Kantor,)s 2799 X(Phil)s 2966 X(Lapsley,)s 3254 X f.I 10 Z(Network)s 2016 X 1345 Y 2160 X(News)s 2330 X(Transfer)s 2586 X(Protocol:)s 2890 X(A)s 2957 X(Proposed)s 3237 X(Standard)s 2016 X 1418 Y 2160 X(for)s 2280 X(the)s 2405 X(Stream)s 2594 X(-Based)s 2822 X(Transmission)s 3224 X(of)s 3319 X(News)s f.R 10 Z(,)s 2016 X 1491 Y 2160 X(Request)s 2413 X(for)s 2528 X(Comments)s 2854 X(977,)s 3007 X(Marina)s 3237 X(del)s 3356 X(Rey,)s 2016 X 1564 Y 2160 X(CA:)s 2315 X(Information)s 2655 X(Sciences)s 2912 X(Institute,)s 3171 X(1986)s 3303 X(.)s 2016 X 1644 Y([Postel82])s 2312 X(Jonathan)s 2579 X(B)s 2623 X(.)s 2670 X(Postel,)s 2881 X f.I 10 Z(Simple)s 3093 X(Mail)s 3250 X(Transfer)s 2016 X 1717 Y 2160 X(Protocol)s f.R 10 Z(,)s 2444 X(Request)s 2692 X(For)s 2817 X(Comments)s 3139 X(821,)s 3287 X(Marina)s 2016 X 1790 Y 2160 X(del)s 2280 X(Rey,)s 2442 X(CA:)s 2613 X(Information)s 2969 X(Sciences)s 3243 X(Institute,)s 2016 X 1863 Y 2160 X(1982)s 2292 X(.)s 2016 X 1943 Y([Reid91])s 2274 X(Brian)s 2465 X(Reid,)s 2651 X f.I 10 Z(Usenet)s 2881 X(Readership)s 3229 X(Summary)s 2016 X 2016 Y 2160 X(Report)s 2431 X(for)s 2598 X(May)s 2806 X(91)s f.R 10 Z(,)s 2978 X(Usenet)s 3253 X(message)s 2016 X 2089 Y 2160 X(<1991Jun2)s 2455 X(.141124)s 2670 X(.12753@pa)s 2976 X(.dec)s 3086 X(.com>)s 3428 X(in)s 2016 X 2162 Y 2160 X f.I 10 Z(news)s 2293 X(.lists)s f.R 10 Z(,)s 2458 X(June,)s 2619 X(1991)s 2751 X(.)s 2016 X 2242 Y([Torek91])s 2307 X(Chris)s 2480 X(Torek,)s 2685 X f.I 10 Z(Hash)s 2854 X(function)s 3102 X(for)s 3209 X(text)s 3337 X(in)s 3419 X(C)s f.R 10 Z(,)s 2016 X 2315 Y 2160 X(Usenet)s 2387 X(message)s 2655 X(<27038@mimsy)s 3101 X(.umd)s 3236 X(.edu>)s 3428 X(in)s 2016 X 2388 Y 2160 X f.I 10 Z(comp)s 2304 X(.lang)s 2439 X(.c)s f.R 10 Z(,)s 2525 X(October,)s 2779 X(1990)s 2911 X(.)s 2016 X 2515 Y 2459 X f.B 10 Z(Author)s 2688 X(Information)s 2016 X 2624 Y 2160 X f.R 10 Z(Rich)s 2313 X(Salz)s 2456 X(is)s 2528 X(a)s 2585 X(Senior)s 2786 X(Software)s 3054 X(Engineer)s 3322 X(at)s 3398 X(the)s 2016 X 2697 Y(Open)s 2196 X(Software)s 2473 X(Foundation,)s 2828 X(where)s 3026 X(is)s 3106 X(a)s 3171 X(member)s 3425 X(of)s 2016 X 2770 Y(the)s 2129 X(DCE)s 2293 X(group)s 2447 X(.)s 2517 X(His)s 2641 X(current)s 2861 X(areas)s 3030 X(of)s 3116 X(concentration)s 2016 X 2843 Y(are)s 2123 X(RPC)s 2273 X(and)s 2394 X(the)s 2501 X(distributed)s 2812 X(time)s 2957 X(service)s 3147 X(.)s 3211 X(He)s 3313 X(joined)s 2016 X 2916 Y(OSF)s 2176 X(after)s 2338 X(working)s 2598 X(at)s 2686 X(BBN)s 2861 X(for)s 2977 X(nearly)s 3183 X(\256ve)s 3322 X(years,)s 2016 X 2989 Y(working)s 2285 X(on)s 2399 X(the)s 2528 X(Cronus)s 2766 X(Distributed)s 3114 X(Programming)s 2016 X 3062 Y(Environment)s 2364 X(.)s 2457 X(Rich)s 2638 X(attended)s 2920 X(MIT)s 3042 X(.)s 3136 X(He)s 3269 X(can)s 3417 X(be)s 2016 X 3135 Y(reached)s 2249 X(via)s 2356 X(U)s 2404 X(.S)s 2458 X(.)s 2500 X(Mail)s 2652 X(at)s 2725 X(Open)s 2893 X(Software)s 3158 X(Foundation;)s 2016 X 3208 Y(11)s 2138 X(Cambridge)s 2490 X(Center;)s 2743 X(Cambridge,)s 3112 X(MA)s 3298 X(02142)s 3463 X(.)s 2016 X 3281 Y(Reach)s 2205 X(him)s 2331 X(electronically)s 2719 X(at)s 2790 X(rsalz@osf)s 3059 X(.org)s 3164 X(.)s 360 X 4967 Y f.B 10 Z(98)s 1598 X(Summer)s 1866 X('92)s 1976 X(USENIX)s 2249 X(\261)s 2304 X(June)s 2463 X(8)s 2496 X(-June)s 2677 X(12,)s 2782 X(1992)s 2936 X(\261)s 2991 X(San)s 3120 X(Antonio,)s 3388 X(TX)s 5280 Y pagebot %%Trailer lastpage