home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: LaTeX Document
(document/latex).
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| Newsgroup Content (archive/news)
| magic
| Supported |
100%
| dexvert
| LaTeX Document (document/latex)
| magic
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| news text
| default
| |
99%
| file
| LaTeX document, ASCII text
| default
| |
100%
| checkBytes
| Printable ASCII
| default
| |
100%
| dexmagic
| PrintFox/Pagefox WEAK
| default
| |
100%
| perlTextCheck
| Likely Text (Perl)
| default
| |
100%
| detectItEasy
| Format: plain text[LF]
| default (weak)
| |
100%
| xdgMime
| message/news
| default
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 50 61 74 68 3a 20 73 70 | 61 72 6b 79 21 75 75 6e |Path: sp|arky!uun|
|00000010| 65 74 21 6f 67 69 63 73 | 65 21 64 65 63 77 72 6c |et!ogics|e!decwrl|
|00000020| 21 70 61 63 62 65 6c 6c | 2e 63 6f 6d 21 61 74 74 |!pacbell|.com!att|
|00000030| 2d 6f 75 74 21 77 61 6c | 74 65 72 21 66 6c 61 73 |-out!wal|ter!flas|
|00000040| 68 21 6e 6f 72 6d 61 6e | 0a 46 72 6f 6d 3a 20 6e |h!norman|.From: n|
|00000050| 6f 72 6d 61 6e 40 66 6c | 61 73 68 2e 62 65 6c 6c |orman@fl|ash.bell|
|00000060| 63 6f 72 65 2e 63 6f 6d | 20 28 4e 6f 72 6d 61 6e |core.com| (Norman|
|00000070| 20 52 61 6d 73 65 79 29 | 0a 4e 65 77 73 67 72 6f | Ramsey)|.Newsgro|
|00000080| 75 70 73 3a 20 63 6f 6d | 70 2e 6c 61 6e 67 2e 6d |ups: com|p.lang.m|
|00000090| 6f 64 75 6c 61 33 0a 53 | 75 62 6a 65 63 74 3a 20 |odula3.S|ubject: |
|000000a0| 49 6e 74 65 72 66 61 63 | 65 20 66 6f 72 20 65 73 |Interfac|e for es|
|000000b0| 74 61 62 6c 69 73 68 69 | 6e 67 20 69 6e 74 65 72 |tablishi|ng inter|
|000000c0| 6e 65 74 20 63 6f 6e 6e | 65 63 74 69 6f 6e 73 0a |net conn|ections.|
|000000d0| 4d 65 73 73 61 67 65 2d | 49 44 3a 20 3c 31 39 39 |Message-|ID: <199|
|000000e0| 33 4a 61 6e 32 36 2e 32 | 32 31 32 32 32 2e 32 35 |3Jan26.2|21222.25|
|000000f0| 39 31 36 40 77 61 6c 74 | 65 72 2e 62 65 6c 6c 63 |916@walt|er.bellc|
|00000100| 6f 72 65 2e 63 6f 6d 3e | 0a 44 61 74 65 3a 20 32 |ore.com>|.Date: 2|
|00000110| 36 20 4a 61 6e 20 39 33 | 20 32 32 3a 31 32 3a 32 |6 Jan 93| 22:12:2|
|00000120| 32 20 47 4d 54 0a 41 72 | 74 69 63 6c 65 2d 49 2e |2 GMT.Ar|ticle-I.|
|00000130| 44 2e 3a 20 77 61 6c 74 | 65 72 2e 31 39 39 33 4a |D.: walt|er.1993J|
|00000140| 61 6e 32 36 2e 32 32 31 | 32 32 32 2e 32 35 39 31 |an26.221|222.2591|
|00000150| 36 0a 53 65 6e 64 65 72 | 3a 20 6e 65 77 73 40 77 |6.Sender|: news@w|
|00000160| 61 6c 74 65 72 2e 62 65 | 6c 6c 63 6f 72 65 2e 63 |alter.be|llcore.c|
|00000170| 6f 6d 0a 4f 72 67 61 6e | 69 7a 61 74 69 6f 6e 3a |om.Organ|ization:|
|00000180| 20 42 65 6c 6c 20 43 6f | 6d 6d 75 6e 69 63 61 74 | Bell Co|mmunicat|
|00000190| 69 6f 6e 73 20 52 65 73 | 65 61 72 63 68 0a 4c 69 |ions Res|earch.Li|
|000001a0| 6e 65 73 3a 20 32 32 35 | 0a 4e 6e 74 70 2d 50 6f |nes: 225|.Nntp-Po|
|000001b0| 73 74 69 6e 67 2d 48 6f | 73 74 3a 20 66 6c 61 73 |sting-Ho|st: flas|
|000001c0| 68 2e 62 65 6c 6c 63 6f | 72 65 2e 63 6f 6d 0a 0a |h.bellco|re.com..|
|000001d0| 0a 49 20 65 6e 63 6c 6f | 73 65 20 61 6e 20 69 6e |.I enclo|se an in|
|000001e0| 74 65 72 66 61 63 65 20 | 74 68 61 74 20 6d 61 6b |terface |that mak|
|000001f0| 65 73 20 69 74 20 65 61 | 73 79 20 74 6f 20 77 72 |es it ea|sy to wr|
|00000200| 69 74 65 20 6e 65 74 77 | 6f 72 6b 65 64 0a 61 70 |ite netw|orked.ap|
|00000210| 70 6c 69 63 61 74 69 6f | 6e 73 2e 20 20 41 20 73 |plicatio|ns. A s|
|00000220| 65 72 76 65 72 20 63 61 | 6c 6c 73 20 4e 65 74 77 |erver ca|lls Netw|
|00000230| 6f 72 6b 2e 53 65 72 76 | 65 20 74 6f 20 65 73 74 |ork.Serv|e to est|
|00000240| 61 62 6c 69 73 68 20 61 | 20 70 6f 72 74 20 6f 6e |ablish a| port on|
|00000250| 20 74 68 65 0a 6c 6f 63 | 61 6c 20 6d 61 63 68 69 | the.loc|al machi|
|00000260| 6e 65 20 74 6f 20 77 68 | 69 63 68 20 63 6c 69 65 |ne to wh|ich clie|
|00000270| 6e 74 73 20 63 61 6e 20 | 63 6f 6e 6e 65 63 74 2e |nts can |connect.|
|00000280| 20 20 45 61 63 68 20 63 | 61 6c 6c 20 74 6f 0a 4e | Each c|all to.N|
|00000290| 65 74 77 6f 72 6b 2e 41 | 63 63 65 70 74 20 62 6c |etwork.A|ccept bl|
|000002a0| 6f 63 6b 73 20 75 6e 74 | 69 6c 20 61 20 63 6c 69 |ocks unt|il a cli|
|000002b0| 65 6e 74 20 63 6f 6e 6e | 65 63 74 73 2c 20 74 68 |ent conn|ects, th|
|000002c0| 65 6e 20 72 65 74 75 72 | 6e 73 20 74 68 65 20 6e |en retur|ns the n|
|000002d0| 65 77 0a 63 6f 6e 6e 65 | 63 74 69 6f 6e 2e 20 20 |ew.conne|ction. |
|000002e0| 43 6c 69 65 6e 74 73 20 | 63 6f 6e 6e 65 63 74 20 |Clients |connect |
|000002f0| 74 6f 20 61 20 73 65 72 | 76 65 72 20 61 74 20 61 |to a ser|ver at a|
|00000300| 20 6b 6e 6f 77 6e 20 68 | 6f 73 74 20 61 6e 64 20 | known h|ost and |
|00000310| 70 6f 72 74 20 62 79 0a | 63 61 6c 6c 69 6e 67 20 |port by.|calling |
|00000320| 4e 65 74 77 6f 72 6b 2e | 43 6f 6e 6e 65 63 74 2e |Network.|Connect.|
|00000330| 20 20 54 68 65 20 69 6d | 70 6c 65 6d 65 6e 74 61 | The im|plementa|
|00000340| 74 69 6f 6e 20 75 73 65 | 73 20 74 68 65 20 73 74 |tion use|s the st|
|00000350| 61 6e 64 61 72 64 20 42 | 53 44 20 49 50 43 0a 74 |andard B|SD IPC.t|
|00000360| 72 69 63 6b 73 2e 0a 0a | 4e 6f 72 6d 61 6e 0a 0a |ricks...|Norman..|
|00000370| 0a 23 20 54 6f 20 75 6e | 62 75 6e 64 6c 65 2c 20 |.# To un|bundle, |
|00000380| 22 73 65 64 20 27 31 2c | 2f 5e 23 20 54 6f 20 75 |"sed '1,|/^# To u|
|00000390| 6e 62 75 6e 64 6c 65 2f | 64 27 20 3c 20 74 68 69 |nbundle/|d' < thi|
|000003a0| 73 66 69 6c 65 20 7c 20 | 73 68 22 0a 23 20 54 6f |sfile | |sh".# To|
|000003b0| 20 75 6e 62 75 6e 64 6c | 65 2c 20 6d 61 6b 65 20 | unbundl|e, make |
|000003c0| 73 75 72 65 20 62 6f 74 | 68 20 6c 69 6e 65 73 20 |sure bot|h lines |
|000003d0| 61 70 70 65 61 72 20 69 | 6e 20 74 68 65 20 66 69 |appear i|n the fi|
|000003e0| 6c 65 0a 23 20 54 75 65 | 20 4a 61 6e 20 32 36 20 |le.# Tue| Jan 26 |
|000003f0| 31 37 3a 31 30 3a 33 37 | 20 45 53 54 20 31 39 39 |17:10:37| EST 199|
|00000400| 33 0a 65 63 68 6f 20 4e | 65 74 77 6f 72 6b 2e 69 |3.echo N|etwork.i|
|00000410| 33 20 31 3e 26 32 0a 73 | 65 64 20 27 73 2f 5e 2d |3 1>&2.s|ed 's/^-|
|00000420| 2f 2f 27 20 3e 27 4e 65 | 74 77 6f 72 6b 2e 69 33 |//' >'Ne|twork.i3|
|00000430| 27 20 3c 3c 27 45 6e 64 | 20 6f 66 20 4e 65 74 77 |' <<'End| of Netw|
|00000440| 6f 72 6b 2e 69 33 27 0a | 2d 28 2a 20 5c 73 65 63 |ork.i3'.|-(* \sec|
|00000450| 74 69 6f 6e 7b 4e 65 74 | 77 6f 72 6b 20 69 6e 74 |tion{Net|work int|
|00000460| 65 72 66 61 63 65 7d 20 | 20 20 20 20 20 20 20 20 |erface} | |
|00000470| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000480| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000490| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 41 20 5b 5b | *).|-(* A [[|
|000004a0| 4e 65 74 77 6f 72 6b 2e | 54 5d 5d 20 69 73 20 61 |Network.|T]] is a|
|000004b0| 20 28 72 65 61 64 65 72 | 2c 20 77 72 69 74 65 72 | (reader|, writer|
|000004c0| 29 20 70 61 69 72 20 75 | 73 65 64 20 66 6f 72 20 |) pair u|sed for |
|000004d0| 74 61 6c 6b 69 6e 67 20 | 74 6f 20 61 6e 6f 74 68 |talking |to anoth|
|000004e0| 65 72 20 20 20 2a 29 0a | 2d 28 2a 20 70 72 6f 63 |er *).|-(* proc|
|000004f0| 65 73 73 2e 20 20 41 20 | 5b 5b 4e 65 74 77 6f 72 |ess. A |[[Networ|
|00000500| 6b 2e 53 65 72 76 65 72 | 5d 5d 20 69 73 20 61 20 |k.Server|]] is a |
|00000510| 73 65 72 76 65 72 20 74 | 68 61 74 20 63 61 6e 20 |server t|hat can |
|00000520| 61 63 63 65 70 74 20 63 | 6f 6e 6e 65 63 74 69 6f |accept c|onnectio|
|00000530| 6e 73 20 20 20 2a 29 0a | 2d 28 2a 20 66 72 6f 6d |ns *).|-(* from|
|00000540| 20 63 6c 69 65 6e 74 20 | 70 72 6f 63 65 73 73 65 | client |processe|
|00000550| 73 2c 20 77 68 69 63 68 | 20 63 61 6c 6c 20 5b 5b |s, which| call [[|
|00000560| 4e 65 74 77 6f 72 6b 2e | 43 6f 6e 6e 65 63 74 5d |Network.|Connect]|
|00000570| 5d 2e 20 20 54 68 65 20 | 73 65 72 76 65 72 20 20 |]. The |server |
|00000580| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 70 72 6f 63 | *).|-(* proc|
|00000590| 65 73 73 20 73 68 6f 75 | 6c 64 20 68 61 76 65 20 |ess shou|ld have |
|000005a0| 61 20 74 68 72 65 61 64 | 20 74 68 61 74 20 6c 6f |a thread| that lo|
|000005b0| 6f 70 73 20 61 6e 64 20 | 63 61 6c 6c 73 20 5b 5b |ops and |calls [[|
|000005c0| 4e 65 74 77 6f 72 6b 2e | 41 63 63 65 70 74 5d 5d |Network.|Accept]]|
|000005d0| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 6f 76 65 72 | *).|-(* over|
|000005e0| 20 61 6e 64 20 6f 76 65 | 72 20 61 67 61 69 6e 2e | and ove|r again.|
|000005f0| 20 20 54 79 70 69 63 61 | 6c 20 73 65 72 76 65 72 | Typica|l server|
|00000600| 73 20 77 69 6c 6c 20 66 | 6f 72 6b 20 61 20 6e 65 |s will f|ork a ne|
|00000610| 77 20 74 68 72 65 61 64 | 20 66 6f 72 20 65 61 63 |w thread| for eac|
|00000620| 68 20 20 20 20 2a 29 0a | 2d 28 2a 20 63 6c 69 65 |h *).|-(* clie|
|00000630| 6e 74 20 63 6f 6e 6e 65 | 63 74 69 6f 6e 20 72 65 |nt conne|ction re|
|00000640| 74 75 72 6e 65 64 20 62 | 79 20 5b 5b 4e 65 74 77 |turned b|y [[Netw|
|00000650| 6f 72 6b 2e 41 63 63 65 | 70 74 5d 5d 2e 20 20 43 |ork.Acce|pt]]. C|
|00000660| 6f 6e 6e 65 63 74 69 6f | 6e 73 20 61 72 65 20 20 |onnectio|ns are |
|00000670| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 73 70 65 63 | *).|-(* spec|
|00000680| 69 66 69 65 64 20 62 79 | 20 49 6e 74 65 72 6e 65 |ified by| Interne|
|00000690| 74 20 68 6f 73 74 20 6e | 61 6d 65 20 61 6e 64 20 |t host n|ame and |
|000006a0| 70 6f 72 74 20 6e 75 6d | 62 65 72 2e 20 20 20 20 |port num|ber. |
|000006b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000006c0| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 20 20 20 20 | *).|-(* |
|000006d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000006e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000006f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000700| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000710| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 54 68 65 20 | *).|-(* The |
|00000720| 77 72 69 74 65 72 20 69 | 6e 20 61 20 5b 5b 4e 65 |writer i|n a [[Ne|
|00000730| 74 77 6f 72 6b 2e 54 5d | 5d 20 6d 75 73 74 20 62 |twork.T]|] must b|
|00000740| 65 20 66 6c 75 73 68 65 | 64 20 65 78 70 6c 69 63 |e flushe|d explic|
|00000750| 69 74 6c 79 20 74 6f 20 | 65 6e 73 75 72 65 20 20 |itly to |ensure |
|00000760| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 74 68 61 74 | *).|-(* that|
|00000770| 20 74 68 65 20 70 65 6e | 64 69 6e 67 20 62 69 74 | the pen|ding bit|
|00000780| 73 20 61 72 65 20 61 63 | 74 75 61 6c 6c 79 20 73 |s are ac|tually s|
|00000790| 65 6e 74 20 6f 76 65 72 | 20 74 68 65 20 6e 65 74 |ent over| the net|
|000007a0| 77 6f 72 6b 2e 20 20 20 | 20 20 20 20 20 20 20 20 |work. | |
|000007b0| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 20 20 20 20 | *).|-(* |
|000007c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000007d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000007e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000007f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000800| 20 20 20 20 20 2a 29 0a | 2d 28 2a 20 3c 69 6e 74 | *).|-(* <int|
|00000810| 65 72 66 61 63 65 3e 3d | 20 20 20 20 20 20 20 20 |erface>=| |
|00000820| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000830| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000840| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000850| 20 20 20 20 20 2a 29 0a | 2d 49 4e 54 45 52 46 41 | *).|-INTERFA|
|00000860| 43 45 20 4e 65 74 77 6f | 72 6b 3b 0a 2d 49 4d 50 |CE Netwo|rk;.-IMP|
|00000870| 4f 52 54 20 55 6e 69 78 | 45 72 72 6f 72 2c 20 52 |ORT Unix|Error, R|
|00000880| 64 2c 20 54 68 72 65 61 | 64 2c 20 57 72 3b 0a 2d |d, Threa|d, Wr;.-|
|00000890| 0a 2d 54 59 50 45 20 54 | 20 3d 20 52 45 43 4f 52 |.-TYPE T| = RECOR|
|000008a0| 44 20 72 64 3a 20 52 64 | 2e 54 3b 20 77 72 3a 20 |D rd: Rd|.T; wr: |
|000008b0| 57 72 2e 54 3b 20 45 4e | 44 3b 0a 2d 0a 2d 50 52 |Wr.T; EN|D;.-.-PR|
|000008c0| 4f 43 45 44 55 52 45 20 | 43 6f 6e 6e 65 63 74 28 |OCEDURE |Connect(|
|000008d0| 68 6f 73 74 6e 61 6d 65 | 3a 54 45 58 54 3b 20 70 |hostname|:TEXT; p|
|000008e0| 6f 72 74 3a 49 4e 54 45 | 47 45 52 29 3a 54 20 52 |ort:INTE|GER):T R|
|000008f0| 41 49 53 45 53 20 7b 55 | 6e 69 78 45 72 72 6f 72 |AISES {U|nixError|
|00000900| 2e 45 7d 3b 0a 2d 20 20 | 28 2a 20 63 6f 6e 6e 65 |.E};.- |(* conne|
|00000910| 63 74 20 6f 76 65 72 20 | 74 68 65 20 6e 65 74 77 |ct over |the netw|
|00000920| 6f 72 6b 20 2a 29 0a 2d | 0a 2d 54 59 50 45 20 0a |ork *).-|.-TYPE .|
|00000930| 2d 20 20 53 65 72 76 65 | 72 20 3c 3a 20 52 45 46 |- Serve|r <: REF|
|00000940| 41 4e 59 3b 0a 2d 0a 2d | 50 52 4f 43 45 44 55 52 |ANY;.-.-|PROCEDUR|
|00000950| 45 20 53 65 72 76 65 28 | 70 6f 72 74 20 3a 3d 20 |E Serve(|port := |
|00000960| 30 29 3a 53 65 72 76 65 | 72 20 52 41 49 53 45 53 |0):Serve|r RAISES|
|00000970| 20 7b 55 6e 69 78 45 72 | 72 6f 72 2e 45 7d 3b 0a | {UnixEr|ror.E};.|
|00000980| 2d 20 20 28 2a 20 73 65 | 72 76 65 20 6e 61 6d 65 |- (* se|rve name|
|00000990| 64 20 70 6f 72 74 2c 20 | 64 65 66 61 75 6c 74 20 |d port, |default |
|000009a0| 61 6e 79 20 70 6f 72 74 | 20 2a 29 0a 2d 0a 2d 50 |any port| *).-.-P|
|000009b0| 52 4f 43 45 44 55 52 45 | 20 41 63 63 65 70 74 28 |ROCEDURE| Accept(|
|000009c0| 73 65 72 76 65 72 3a 20 | 53 65 72 76 65 72 29 3a |server: |Server):|
|000009d0| 54 20 52 41 49 53 45 53 | 20 7b 55 6e 69 78 45 72 |T RAISES| {UnixEr|
|000009e0| 72 6f 72 2e 45 2c 20 54 | 68 72 65 61 64 2e 41 6c |ror.E, T|hread.Al|
|000009f0| 65 72 74 65 64 7d 3b 0a | 2d 20 20 28 2a 20 61 63 |erted};.|- (* ac|
|00000a00| 63 65 70 74 20 61 20 63 | 6f 6e 6e 65 63 74 69 6f |cept a c|onnectio|
|00000a10| 6e 20 6f 6e 20 74 68 65 | 20 73 65 72 76 65 72 20 |n on the| server |
|00000a20| 28 62 6c 6f 63 6b 73 2c | 20 73 65 72 69 61 6c 69 |(blocks,| seriali|
|00000a30| 7a 65 64 20 69 6e 74 65 | 72 6e 61 6c 6c 79 29 20 |zed inte|rnally) |
|00000a40| 2a 29 0a 2d 0a 2d 50 52 | 4f 43 45 44 55 52 45 20 |*).-.-PR|OCEDURE |
|00000a50| 48 6f 73 74 28 73 65 72 | 76 65 72 3a 20 53 65 72 |Host(ser|ver: Ser|
|00000a60| 76 65 72 29 3a 54 45 58 | 54 3b 0a 2d 20 20 28 2a |ver):TEX|T;.- (*|
|00000a70| 20 72 65 74 75 72 6e 20 | 6e 61 6d 65 20 6f 66 20 | return |name of |
|00000a80| 68 6f 73 74 20 73 65 72 | 76 65 64 20 62 79 20 73 |host ser|ved by s|
|00000a90| 65 72 76 65 72 20 2a 29 | 0a 2d 0a 2d 50 52 4f 43 |erver *)|.-.-PROC|
|00000aa0| 45 44 55 52 45 20 50 6f | 72 74 28 73 65 72 76 65 |EDURE Po|rt(serve|
|00000ab0| 72 3a 20 53 65 72 76 65 | 72 29 3a 49 4e 54 45 47 |r: Serve|r):INTEG|
|00000ac0| 45 52 3b 0a 2d 20 20 28 | 2a 20 72 65 74 75 72 6e |ER;.- (|* return|
|00000ad0| 20 70 6f 72 74 20 6e 75 | 6d 62 65 72 20 73 65 72 | port nu|mber ser|
|00000ae0| 76 65 64 20 62 79 20 73 | 65 72 76 65 72 20 2a 29 |ved by s|erver *)|
|00000af0| 0a 2d 0a 2d 45 4e 44 20 | 4e 65 74 77 6f 72 6b 2e |.-.-END |Network.|
|00000b00| 0a 45 6e 64 20 6f 66 20 | 4e 65 74 77 6f 72 6b 2e |.End of |Network.|
|00000b10| 69 33 0a 65 63 68 6f 20 | 4e 65 74 77 6f 72 6b 2e |i3.echo |Network.|
|00000b20| 6d 33 20 31 3e 26 32 0a | 73 65 64 20 27 73 2f 5e |m3 1>&2.|sed 's/^|
|00000b30| 2d 2f 2f 27 20 3e 27 4e | 65 74 77 6f 72 6b 2e 6d |-//' >'N|etwork.m|
|00000b40| 33 27 20 3c 3c 27 45 6e | 64 20 6f 66 20 4e 65 74 |3' <<'En|d of Net|
|00000b50| 77 6f 72 6b 2e 6d 33 27 | 0a 2d 28 2a 20 54 68 65 |work.m3'|.-(* The|
|00000b60| 20 69 6d 70 6c 65 6d 65 | 6e 74 61 74 69 6f 6e 20 | impleme|ntation |
|00000b70| 6f 66 20 74 68 65 20 5b | 5b 4e 65 74 77 6f 72 6b |of the [|[Network|
|00000b80| 5d 5d 20 69 6e 74 65 72 | 66 61 63 65 20 69 73 20 |]] inter|face is |
|00000b90| 62 61 73 65 64 20 6f 6e | 20 74 68 65 20 43 20 63 |based on| the C c|
|00000ba0| 6f 64 65 20 20 20 2a 29 | 0a 2d 28 2a 20 69 6e 20 |ode *)|.-(* in |
|00000bb0| 74 68 65 20 42 53 44 20 | 34 2e 33 20 49 50 43 20 |the BSD |4.3 IPC |
|00000bc0| 74 75 74 6f 72 69 61 6c | 2e 20 20 20 20 20 20 20 |tutorial|. |
|00000bd0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000be0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000bf0| 20 20 20 20 20 20 2a 29 | 0a 2d 28 2a 20 20 20 20 | *)|.-(* |
|00000c00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c10| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c20| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c30| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c40| 20 20 20 20 20 20 2a 29 | 0a 2d 28 2a 20 3c 2a 3e | *)|.-(* <*>|
|00000c50| 3d 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |= | |
|00000c60| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c70| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c80| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000c90| 20 20 20 20 20 20 2a 29 | 0a 2d 55 4e 53 41 46 45 | *)|.-UNSAFE|
|00000ca0| 20 4d 4f 44 55 4c 45 20 | 4e 65 74 77 6f 72 6b 3b | MODULE |Network;|
|00000cb0| 0a 2d 49 4d 50 4f 52 54 | 20 46 6d 74 2c 20 4d 33 |.-IMPORT| Fmt, M3|
|00000cc0| 74 6f 43 2c 20 52 64 2c | 20 52 54 53 63 68 65 64 |toC, Rd,| RTSched|
|00000cd0| 75 6c 65 72 2c 20 54 65 | 78 74 2c 20 54 68 72 65 |uler, Te|xt, Thre|
|00000ce0| 61 64 2c 0a 2d 20 20 20 | 20 20 20 20 55 46 69 6c |ad,.- | UFil|
|00000cf0| 65 52 64 57 72 2c 20 55 | 69 6e 2c 20 55 6e 65 74 |eRdWr, U|in, Unet|
|00000d00| 64 62 2c 20 55 6e 69 78 | 2c 20 55 6e 69 78 45 72 |db, Unix|, UnixEr|
|00000d10| 72 6f 72 2c 20 55 73 6f | 63 6b 65 74 2c 20 57 72 |ror, Uso|cket, Wr|
|00000d20| 3b 0a 2d 28 2a 20 3c 74 | 6f 70 6c 65 76 65 6c 3e |;.-(* <t|oplevel>|
|00000d30| 3d 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |= | |
|00000d40| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000d50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00000d60| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 2a | | *|
|00000d70| 29 0a 2d 50 52 4f 43 45 | 44 55 52 45 20 43 6f 6e |).-PROCE|DURE Con|
|00000d80| 6e 65 63 74 28 68 6f 73 | 74 3a 54 45 58 54 3b 20 |nect(hos|t:TEXT; |
|00000d90| 70 6f 72 74 3a 49 4e 54 | 45 47 45 52 29 3a 54 20 |port:INT|EGER):T |
|00000da0| 52 41 49 53 45 53 20 7b | 55 6e 69 78 45 72 72 6f |RAISES {|UnixErro|
|00000db0| 72 2e 45 7d 20 3d 0a 2d | 56 41 52 20 68 70 20 20 |r.E} =.-|VAR hp |
|00000dc0| 20 20 3a 3d 20 55 6e 65 | 74 64 62 2e 67 65 74 68 | := Une|tdb.geth|
|00000dd0| 6f 73 74 62 79 6e 61 6d | 65 28 4d 33 74 6f 43 2e |ostbynam|e(M3toC.|
|00000de0| 54 74 6f 53 28 68 6f 73 | 74 29 29 3b 0a 2d 20 20 |TtoS(hos|t));.- |
|00000df0| 20 20 73 6f 63 6b 20 20 | 3a 3d 20 55 73 6f 63 6b | sock |:= Usock|
|00000e00| 65 74 2e 73 6f 63 6b 65 | 74 28 55 73 6f 63 6b 65 |et.socke|t(Usocke|
|00000e10| 74 2e 41 46 5f 49 4e 45 | 54 2c 20 55 73 6f 63 6b |t.AF_INE|T, Usock|
|00000e20| 65 74 2e 53 4f 43 4b 5f | 53 54 52 45 41 4d 2c 20 |et.SOCK_|STREAM, |
|00000e30| 30 29 3b 0a 2d 20 20 20 | 20 73 65 72 76 65 72 3a |0);.- | server:|
|00000e40| 20 20 55 69 6e 2e 73 74 | 72 75 63 74 5f 73 6f 63 | Uin.st|ruct_soc|
|00000e50| 6b 61 64 64 72 5f 69 6e | 3b 0a 2d 42 45 47 49 4e |kaddr_in|;.-BEGIN|
|00000e60| 0a 2d 20 20 49 46 20 68 | 70 20 3d 20 4e 49 4c 20 |.- IF h|p = NIL |
|00000e70| 54 48 45 4e 20 55 6e 69 | 78 45 72 72 6f 72 2e 46 |THEN Uni|xError.F|
|00000e80| 61 69 6c 28 22 75 6e 6b | 6e 6f 77 6e 20 68 6f 73 |ail("unk|nown hos|
|00000e90| 74 3a 20 22 20 26 20 68 | 6f 73 74 29 20 45 4e 44 |t: " & h|ost) END|
|00000ea0| 3b 0a 2d 20 20 49 46 20 | 73 6f 63 6b 20 3c 20 30 |;.- IF |sock < 0|
|00000eb0| 20 54 48 45 4e 20 55 6e | 69 78 45 72 72 6f 72 2e | THEN Un|ixError.|
|00000ec0| 46 61 69 6c 28 22 63 61 | 6e 27 74 20 63 72 65 61 |Fail("ca|n't crea|
|00000ed0| 74 65 20 73 6f 63 6b 65 | 74 22 29 20 45 4e 44 3b |te socke|t") END;|
|00000ee0| 0a 2d 20 20 73 65 72 76 | 65 72 2e 73 69 6e 5f 66 |.- serv|er.sin_f|
|00000ef0| 61 6d 69 6c 79 20 3a 3d | 20 55 73 6f 63 6b 65 74 |amily :=| Usocket|
|00000f00| 2e 41 46 5f 49 4e 45 54 | 3b 0a 2d 20 20 62 63 6f |.AF_INET|;.- bco|
|00000f10| 70 79 28 68 70 2e 68 5f | 61 64 64 72 5f 6c 69 73 |py(hp.h_|addr_lis|
|00000f20| 74 5e 2c 20 41 44 52 28 | 73 65 72 76 65 72 2e 73 |t^, ADR(|server.s|
|00000f30| 69 6e 5f 61 64 64 72 29 | 2c 20 68 70 2e 68 5f 6c |in_addr)|, hp.h_l|
|00000f40| 65 6e 67 74 68 29 3b 0a | 2d 20 20 73 65 72 76 65 |ength);.|- serve|
|00000f50| 72 2e 73 69 6e 5f 70 6f | 72 74 20 3a 3d 20 55 69 |r.sin_po|rt := Ui|
|00000f60| 6e 2e 68 74 6f 6e 73 28 | 70 6f 72 74 29 3b 0a 2d |n.htons(|port);.-|
|00000f70| 20 20 49 46 20 55 73 6f | 63 6b 65 74 2e 63 6f 6e | IF Uso|cket.con|
|00000f80| 6e 65 63 74 28 73 6f 63 | 6b 2c 20 41 44 52 28 73 |nect(soc|k, ADR(s|
|00000f90| 65 72 76 65 72 29 2c 20 | 42 59 54 45 53 49 5a 45 |erver), |BYTESIZE|
|00000fa0| 28 73 65 72 76 65 72 29 | 29 20 3c 20 30 20 54 48 |(server)|) < 0 TH|
|00000fb0| 45 4e 0a 2d 20 20 20 20 | 55 6e 69 78 45 72 72 6f |EN.- |UnixErro|
|00000fc0| 72 2e 46 61 69 6c 28 46 | 6d 74 2e 46 28 22 43 61 |r.Fail(F|mt.F("Ca|
|00000fd0| 6e 27 74 20 63 6f 6e 6e | 65 63 74 20 74 6f 20 73 |n't conn|ect to s|
|00000fe0| 65 72 76 65 72 20 61 74 | 20 25 73 20 25 73 22 2c |erver at| %s %s",|
|00000ff0| 20 68 6f 73 74 2c 20 46 | 6d 74 2e 49 6e 74 28 70 | host, F|mt.Int(p|
|00001000| 6f 72 74 29 29 29 3b 0a | 2d 20 20 45 4e 44 3b 0a |ort)));.|- END;.|
|00001010| 2d 20 20 52 45 54 55 52 | 4e 20 46 72 6f 6d 46 44 |- RETUR|N FromFD|
|00001020| 28 73 6f 63 6b 29 3b 0a | 2d 45 4e 44 20 43 6f 6e |(sock);.|-END Con|
|00001030| 6e 65 63 74 3b 0a 2d 28 | 2a 20 57 68 65 6e 20 63 |nect;.-(|* When c|
|00001040| 72 65 61 74 69 6e 67 20 | 61 20 28 72 65 61 64 65 |reating |a (reade|
|00001050| 72 2c 20 77 72 69 74 65 | 72 29 20 70 61 69 72 20 |r, write|r) pair |
|00001060| 66 72 6f 6d 20 61 20 73 | 6f 63 6b 65 74 2c 20 49 |from a s|ocket, I|
|00001070| 20 64 75 70 6c 69 63 61 | 74 65 20 74 68 65 20 20 | duplica|te the |
|00001080| 20 20 20 2a 29 0a 2d 28 | 2a 20 73 6f 63 6b 65 74 | *).-(|* socket|
|00001090| 2c 20 77 68 69 63 68 20 | 6d 61 6b 65 73 20 69 74 |, which |makes it|
|000010a0| 20 70 6f 73 73 69 62 6c | 65 20 74 6f 20 63 6c 6f | possibl|e to clo|
|000010b0| 73 65 20 62 6f 74 68 20 | 74 68 65 20 72 65 61 64 |se both |the read|
|000010c0| 65 72 20 61 6e 64 20 77 | 72 69 74 65 72 20 20 20 |er and w|riter |
|000010d0| 20 20 20 2a 29 0a 2d 28 | 2a 20 77 69 74 68 6f 75 | *).-(|* withou|
|000010e0| 74 20 62 61 72 66 69 6e | 67 2e 20 20 49 66 20 73 |t barfin|g. If s|
|000010f0| 75 63 68 20 77 61 73 74 | 65 66 75 6c 20 75 73 65 |uch wast|eful use|
|00001100| 20 6f 66 20 6f 70 65 6e | 20 66 69 6c 65 20 64 65 | of open| file de|
|00001110| 73 63 72 69 70 74 6f 72 | 73 20 20 20 20 20 20 20 |scriptor|s |
|00001120| 20 20 20 2a 29 0a 2d 28 | 2a 20 6f 66 66 65 6e 64 | *).-(|* offend|
|00001130| 73 2c 20 74 68 65 20 73 | 6f 6c 75 74 69 6f 6e 20 |s, the s|olution |
|00001140| 69 73 20 74 6f 20 69 6d | 70 6c 65 6d 65 6e 74 20 |is to im|plement |
|00001150| 6e 65 77 20 72 65 61 64 | 65 72 20 61 6e 64 20 77 |new read|er and w|
|00001160| 72 69 74 65 72 20 63 6c | 61 73 73 65 73 20 20 20 |riter cl|asses |
|00001170| 20 20 20 2a 29 0a 2d 28 | 2a 20 73 75 63 68 20 74 | *).-(|* such t|
|00001180| 68 61 74 20 74 68 65 20 | 75 6e 64 65 72 6c 79 69 |hat the |underlyi|
|00001190| 6e 67 20 66 69 6c 65 20 | 64 65 73 63 72 69 70 74 |ng file |descript|
|000011a0| 6f 72 20 69 73 20 6e 6f | 74 20 63 6c 6f 73 65 64 |or is no|t closed|
|000011b0| 20 75 6e 74 69 6c 20 62 | 6f 74 68 20 74 68 65 20 | until b|oth the |
|000011c0| 20 20 20 2a 29 0a 2d 28 | 2a 20 72 65 61 64 65 72 | *).-(|* reader|
|000011d0| 20 61 6e 64 20 77 72 69 | 74 65 72 20 61 72 65 20 | and wri|ter are |
|000011e0| 63 6c 6f 73 65 64 2e 20 | 20 20 20 20 20 20 20 20 |closed. | |
|000011f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001200| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001210| 20 20 20 2a 29 0a 2d 28 | 2a 20 20 20 20 20 20 20 | *).-(|* |
|00001220| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001230| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001240| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001250| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001260| 20 20 20 2a 29 0a 2d 28 | 2a 20 3c 74 6f 70 6c 65 | *).-(|* <tople|
|00001270| 76 65 6c 3e 3d 20 20 20 | 20 20 20 20 20 20 20 20 |vel>= | |
|00001280| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001290| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000012a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000012b0| 20 20 20 2a 29 0a 2d 50 | 52 4f 43 45 44 55 52 45 | *).-P|ROCEDURE|
|000012c0| 20 46 72 6f 6d 46 44 28 | 73 6f 63 6b 3a 49 4e 54 | FromFD(|sock:INT|
|000012d0| 45 47 45 52 29 3a 54 20 | 3d 0a 2d 56 41 52 20 0a |EGER):T |=.-VAR .|
|000012e0| 2d 20 20 69 6e 70 75 74 | 20 20 3a 3d 20 55 46 69 |- input| := UFi|
|000012f0| 6c 65 52 64 57 72 2e 43 | 72 65 61 74 65 46 69 6c |leRdWr.C|reateFil|
|00001300| 65 52 65 61 64 65 72 28 | 73 6f 63 6b 29 3b 0a 2d |eReader(|sock);.-|
|00001310| 20 20 6f 75 74 70 75 74 | 20 3a 3d 20 55 46 69 6c | output| := UFil|
|00001320| 65 52 64 57 72 2e 43 72 | 65 61 74 65 46 69 6c 65 |eRdWr.Cr|eateFile|
|00001330| 57 72 69 74 65 72 28 55 | 6e 69 78 2e 64 75 70 28 |Writer(U|nix.dup(|
|00001340| 73 6f 63 6b 29 2c 20 62 | 75 66 66 65 72 65 64 20 |sock), b|uffered |
|00001350| 3a 3d 20 54 52 55 45 29 | 3b 0a 2d 20 20 3c 2a 46 |:= TRUE)|;.- <*F|
|00001360| 41 54 41 4c 20 52 64 2e | 46 61 69 6c 75 72 65 2c |ATAL Rd.|Failure,|
|00001370| 20 57 72 2e 46 61 69 6c | 75 72 65 2a 3e 0a 2d 42 | Wr.Fail|ure*>.-B|
|00001380| 45 47 49 4e 0a 2d 20 20 | 52 45 54 55 52 4e 20 54 |EGIN.- |RETURN T|
|00001390| 20 7b 69 6e 70 75 74 2c | 20 6f 75 74 70 75 74 7d | {input,| output}|
|000013a0| 3b 0a 2d 45 4e 44 20 46 | 72 6f 6d 46 44 3b 0a 2d |;.-END F|romFD;.-|
|000013b0| 28 2a 20 54 68 69 73 20 | 69 6d 70 6c 65 6d 65 6e |(* This |implemen|
|000013c0| 74 61 74 69 6f 6e 20 6f | 66 20 5b 5b 62 63 6f 70 |tation o|f [[bcop|
|000013d0| 79 5d 5d 20 69 73 20 73 | 6c 69 67 68 74 6c 79 20 |y]] is s|lightly |
|000013e0| 65 6d 62 61 72 72 61 73 | 73 69 6e 67 2c 20 62 75 |embarras|sing, bu|
|000013f0| 74 20 49 20 20 20 20 20 | 20 20 20 20 2a 29 0a 2d |t I | *).-|
|00001400| 28 2a 20 66 69 6e 64 20 | 61 64 64 72 65 73 73 20 |(* find |address |
|00001410| 61 72 69 74 68 6d 65 74 | 69 63 20 74 6f 6f 20 70 |arithmet|ic too p|
|00001420| 61 69 6e 66 75 6c 20 74 | 6f 20 63 6f 6e 74 65 6d |ainful t|o contem|
|00001430| 70 6c 61 74 65 2e 20 20 | 20 20 20 20 20 20 20 20 |plate. | |
|00001440| 20 20 20 20 20 20 20 20 | 20 20 20 20 2a 29 0a 2d | | *).-|
|00001450| 28 2a 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |(* | |
|00001460| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001470| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001480| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001490| 20 20 20 20 20 20 20 20 | 20 20 20 20 2a 29 0a 2d | | *).-|
|000014a0| 28 2a 20 3c 74 6f 70 6c | 65 76 65 6c 3e 3d 20 20 |(* <topl|evel>= |
|000014b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000014c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000014d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000014e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 2a 29 0a 2d | | *).-|
|000014f0| 50 52 4f 43 45 44 55 52 | 45 20 62 63 6f 70 79 28 |PROCEDUR|E bcopy(|
|00001500| 73 72 63 3a 41 44 44 52 | 45 53 53 3b 20 64 65 73 |src:ADDR|ESS; des|
|00001510| 74 3a 41 44 44 52 45 53 | 53 3b 20 6e 3a 49 4e 54 |t:ADDRES|S; n:INT|
|00001520| 45 47 45 52 29 20 3d 0a | 2d 56 41 52 20 73 2c 20 |EGER) =.|-VAR s, |
|00001530| 64 20 3a 20 55 4e 54 52 | 41 43 45 44 20 52 45 46 |d : UNTR|ACED REF|
|00001540| 20 41 52 52 41 59 20 5b | 30 2e 2e 31 30 32 33 5d | ARRAY [|0..1023]|
|00001550| 20 4f 46 20 43 48 41 52 | 3b 0a 2d 42 45 47 49 4e | OF CHAR|;.-BEGIN|
|00001560| 0a 2d 20 20 49 46 20 6e | 20 3c 3d 20 30 20 54 48 |.- IF n| <= 0 TH|
|00001570| 45 4e 20 52 45 54 55 52 | 4e 20 45 4e 44 3b 0a 2d |EN RETUR|N END;.-|
|00001580| 20 20 73 20 3a 3d 20 73 | 72 63 3b 0a 2d 20 20 64 | s := s|rc;.- d|
|00001590| 20 3a 3d 20 64 65 73 74 | 3b 0a 2d 20 20 53 55 42 | := dest|;.- SUB|
|000015a0| 41 52 52 41 59 28 64 5e | 2c 20 30 2c 20 6e 29 20 |ARRAY(d^|, 0, n) |
|000015b0| 3a 3d 20 53 55 42 41 52 | 52 41 59 28 73 5e 2c 20 |:= SUBAR|RAY(s^, |
|000015c0| 30 2c 20 6e 29 3b 0a 2d | 45 4e 44 20 62 63 6f 70 |0, n);.-|END bcop|
|000015d0| 79 3b 0a 2d 28 2a 20 54 | 6f 20 73 65 72 69 61 6c |y;.-(* T|o serial|
|000015e0| 69 7a 65 20 61 63 63 65 | 70 74 61 6e 63 65 20 6f |ize acce|ptance o|
|000015f0| 66 20 6e 65 77 20 63 6f | 6e 6e 65 63 74 69 6f 6e |f new co|nnection|
|00001600| 73 2c 20 61 20 5b 5b 4e | 65 74 77 6f 72 6b 2e 53 |s, a [[N|etwork.S|
|00001610| 65 72 76 65 72 5d 5d 20 | 20 20 20 20 20 20 20 20 |erver]] | |
|00001620| 2a 29 0a 2d 28 2a 20 69 | 73 20 61 6c 73 6f 20 61 |*).-(* i|s also a|
|00001630| 20 6d 75 74 65 78 2e 20 | 20 20 20 20 20 20 20 20 | mutex. | |
|00001640| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001650| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001660| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001670| 2a 29 0a 2d 28 2a 20 20 | 20 20 20 20 20 20 20 20 |*).-(* | |
|00001680| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001690| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000016a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000016b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000016c0| 2a 29 0a 2d 28 2a 20 3c | 74 6f 70 6c 65 76 65 6c |*).-(* <|toplevel|
|000016d0| 3e 3d 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |>= | |
|000016e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000016f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001700| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001710| 2a 29 0a 2d 52 45 56 45 | 41 4c 0a 2d 20 20 53 65 |*).-REVE|AL.- Se|
|00001720| 72 76 65 72 20 3d 20 4d | 55 54 45 58 20 42 52 41 |rver = M|UTEX BRA|
|00001730| 4e 44 45 44 20 22 4e 65 | 74 77 6f 72 6b 2e 50 72 |NDED "Ne|twork.Pr|
|00001740| 69 76 61 74 65 22 20 4f | 42 4a 45 43 54 0a 2d 20 |ivate" O|BJECT.- |
|00001750| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 73 65 72 | | ser|
|00001760| 76 65 72 20 3a 20 55 69 | 6e 2e 73 74 72 75 63 74 |ver : Ui|n.struct|
|00001770| 5f 73 6f 63 6b 61 64 64 | 72 5f 69 6e 3b 0a 2d 20 |_sockadd|r_in;.- |
|00001780| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 73 6f 63 | | soc|
|00001790| 6b 3a 20 49 4e 54 45 47 | 45 52 3b 0a 2d 20 20 20 |k: INTEG|ER;.- |
|000017a0| 20 20 20 20 20 20 20 20 | 20 20 20 68 6f 73 74 6e | | hostn|
|000017b0| 61 6d 65 20 3a 20 54 45 | 58 54 3b 0a 2d 20 20 20 |ame : TE|XT;.- |
|000017c0| 20 20 20 20 20 20 20 20 | 20 20 20 70 6f 72 74 20 | | port |
|000017d0| 3a 20 49 4e 54 45 47 45 | 52 3b 0a 2d 20 20 20 20 |: INTEGE|R;.- |
|000017e0| 20 20 20 20 20 20 20 20 | 45 4e 44 3b 0a 2d 0a 2d | |END;.-.-|
|000017f0| 50 52 4f 43 45 44 55 52 | 45 20 48 6f 73 74 28 73 |PROCEDUR|E Host(s|
|00001800| 65 72 76 65 72 3a 20 53 | 65 72 76 65 72 29 3a 54 |erver: S|erver):T|
|00001810| 45 58 54 20 20 20 20 3d | 20 42 45 47 49 4e 20 52 |EXT =| BEGIN R|
|00001820| 45 54 55 52 4e 20 73 65 | 72 76 65 72 2e 68 6f 73 |ETURN se|rver.hos|
|00001830| 74 6e 61 6d 65 20 45 4e | 44 20 48 6f 73 74 3b 0a |tname EN|D Host;.|
|00001840| 2d 50 52 4f 43 45 44 55 | 52 45 20 50 6f 72 74 28 |-PROCEDU|RE Port(|
|00001850| 73 65 72 76 65 72 3a 20 | 53 65 72 76 65 72 29 3a |server: |Server):|
|00001860| 49 4e 54 45 47 45 52 20 | 3d 20 42 45 47 49 4e 20 |INTEGER |= BEGIN |
|00001870| 52 45 54 55 52 4e 20 73 | 65 72 76 65 72 2e 70 6f |RETURN s|erver.po|
|00001880| 72 74 20 20 20 20 20 45 | 4e 44 20 50 6f 72 74 3b |rt E|ND Port;|
|00001890| 0a 2d 28 2a 20 54 68 65 | 20 63 6f 64 65 20 74 6f |.-(* The| code to|
|000018a0| 20 63 72 65 61 74 65 20 | 61 6e 20 61 63 63 65 70 | create |an accep|
|000018b0| 74 69 6e 67 20 73 6f 63 | 6b 65 74 20 77 69 74 68 |ting soc|ket with|
|000018c0| 69 6e 20 74 68 65 20 73 | 65 72 76 65 72 20 20 20 |in the s|erver |
|000018d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2a 29 | | *)|
|000018e0| 0a 2d 28 2a 20 69 73 20 | 66 72 6f 6d 20 74 68 65 |.-(* is |from the|
|000018f0| 20 49 50 43 20 74 75 74 | 6f 72 69 61 6c 2e 20 20 | IPC tut|orial. |
|00001900| 49 27 76 65 20 61 64 64 | 65 64 20 74 68 65 20 63 |I've add|ed the c|
|00001910| 61 6c 6c 20 74 6f 20 5b | 5b 67 65 74 68 6f 73 74 |all to [|[gethost|
|00001920| 6e 61 6d 65 5d 5d 20 20 | 20 20 20 20 20 20 2a 29 |name]] | *)|
|00001930| 0a 2d 28 2a 20 61 73 20 | 61 20 63 6f 6e 76 65 6e |.-(* as |a conven|
|00001940| 69 65 6e 63 65 2e 20 20 | 49 20 63 61 6c 6c 20 5b |ience. |I call [|
|00001950| 5b 55 73 6f 63 6b 65 74 | 2e 6c 69 73 74 65 6e 5d |[Usocket|.listen]|
|00001960| 5d 20 77 69 74 68 20 74 | 68 65 20 6d 61 78 69 6d |] with t|he maxim|
|00001970| 75 6d 20 62 61 63 6b 6c | 6f 67 2c 20 20 20 2a 29 |um backl|og, *)|
|00001980| 0a 2d 28 2a 20 35 2c 20 | 62 65 63 61 75 73 65 20 |.-(* 5, |because |
|00001990| 74 68 65 72 65 20 73 65 | 65 6d 73 20 6e 6f 20 72 |there se|ems no r|
|000019a0| 65 61 73 6f 6e 20 74 6f | 20 6d 61 6b 65 20 74 68 |eason to| make th|
|000019b0| 65 20 70 6f 74 65 6e 74 | 69 61 6c 20 62 61 63 6b |e potent|ial back|
|000019c0| 6c 6f 67 20 61 6e 79 20 | 20 20 20 20 20 20 2a 29 |log any | *)|
|000019d0| 0a 2d 28 2a 20 73 6d 61 | 6c 6c 65 72 20 74 68 61 |.-(* sma|ller tha|
|000019e0| 6e 20 74 68 65 20 6d 61 | 78 69 6d 75 6d 2e 20 20 |n the ma|ximum. |
|000019f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a10| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2a 29 | | *)|
|00001a20| 0a 2d 28 2a 20 20 20 20 | 20 20 20 20 20 20 20 20 |.-(* | |
|00001a30| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a40| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a50| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a60| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2a 29 | | *)|
|00001a70| 0a 2d 28 2a 20 3c 74 6f | 70 6c 65 76 65 6c 3e 3d |.-(* <to|plevel>=|
|00001a80| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001a90| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001aa0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001ab0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2a 29 | | *)|
|00001ac0| 0a 2d 50 52 4f 43 45 44 | 55 52 45 20 53 65 72 76 |.-PROCED|URE Serv|
|00001ad0| 65 28 70 6f 72 74 20 3a | 3d 20 30 29 3a 53 65 72 |e(port :|= 0):Ser|
|00001ae0| 76 65 72 20 52 41 49 53 | 45 53 20 7b 55 6e 69 78 |ver RAIS|ES {Unix|
|00001af0| 45 72 72 6f 72 2e 45 7d | 20 3d 0a 2d 56 41 52 20 |Error.E}| =.-VAR |
|00001b00| 73 65 72 76 65 72 20 3a | 3d 20 4e 45 57 28 53 65 |server :|= NEW(Se|
|00001b10| 72 76 65 72 29 3b 0a 2d | 20 20 20 20 68 6f 73 74 |rver);.-| host|
|00001b20| 62 75 66 20 3a 20 41 52 | 52 41 59 5b 30 2e 2e 31 |buf : AR|RAY[0..1|
|00001b30| 30 32 33 5d 20 4f 46 20 | 43 48 41 52 3b 0a 2d 42 |023] OF |CHAR;.-B|
|00001b40| 45 47 49 4e 0a 2d 20 20 | 73 65 72 76 65 72 2e 73 |EGIN.- |server.s|
|00001b50| 6f 63 6b 20 3a 3d 20 55 | 73 6f 63 6b 65 74 2e 73 |ock := U|socket.s|
|00001b60| 6f 63 6b 65 74 28 55 73 | 6f 63 6b 65 74 2e 41 46 |ocket(Us|ocket.AF|
|00001b70| 5f 49 4e 45 54 2c 20 55 | 73 6f 63 6b 65 74 2e 53 |_INET, U|socket.S|
|00001b80| 4f 43 4b 5f 53 54 52 45 | 41 4d 2c 20 30 29 3b 0a |OCK_STRE|AM, 0);.|
|00001b90| 2d 20 20 49 46 20 73 65 | 72 76 65 72 2e 73 6f 63 |- IF se|rver.soc|
|00001ba0| 6b 20 3c 20 30 20 54 48 | 45 4e 20 55 6e 69 78 45 |k < 0 TH|EN UnixE|
|00001bb0| 72 72 6f 72 2e 46 61 69 | 6c 28 22 63 72 65 61 74 |rror.Fai|l("creat|
|00001bc0| 69 6e 67 20 73 6f 63 6b | 65 74 22 29 20 45 4e 44 |ing sock|et") END|
|00001bd0| 3b 0a 2d 20 20 49 46 20 | 55 6e 69 78 2e 67 65 74 |;.- IF |Unix.get|
|00001be0| 68 6f 73 74 6e 61 6d 65 | 28 41 44 52 28 68 6f 73 |hostname|(ADR(hos|
|00001bf0| 74 62 75 66 5b 30 5d 29 | 2c 20 42 59 54 45 53 49 |tbuf[0])|, BYTESI|
|00001c00| 5a 45 28 68 6f 73 74 62 | 75 66 29 29 20 3c 20 30 |ZE(hostb|uf)) < 0|
|00001c10| 20 54 48 45 4e 0a 2d 20 | 20 20 20 55 6e 69 78 45 | THEN.- | UnixE|
|00001c20| 72 72 6f 72 2e 46 61 69 | 6c 28 22 67 65 74 68 6f |rror.Fai|l("getho|
|00001c30| 73 74 6e 61 6d 65 22 29 | 3b 0a 2d 20 20 45 4e 44 |stname")|;.- END|
|00001c40| 3b 0a 2d 20 20 28 2a 20 | 49 74 27 73 20 6e 6f 74 |;.- (* |It's not|
|00001c50| 20 73 61 66 65 20 74 6f | 20 75 73 65 20 5b 5b 4d | safe to| use [[M|
|00001c60| 33 74 6f 43 2e 53 74 6f | 54 5d 5d 20 68 65 72 65 |3toC.Sto|T]] here|
|00001c70| 20 62 65 63 61 75 73 65 | 20 74 68 65 20 73 74 6f | because| the sto|
|00001c80| 72 61 67 65 20 68 6f 6c | 64 69 6e 67 20 20 20 20 |rage hol|ding |
|00001c90| 20 2a 29 0a 2d 20 20 28 | 2a 20 74 68 65 20 68 6f | *).- (|* the ho|
|00001ca0| 73 74 20 6e 61 6d 65 20 | 6d 61 79 20 62 65 20 72 |st name |may be r|
|00001cb0| 65 2d 75 73 65 64 2e 20 | 20 20 20 20 20 20 20 20 |e-used. | |
|00001cc0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001cd0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001ce0| 20 20 20 2a 29 0a 2d 20 | 20 28 2a 20 20 20 20 20 | *).- | (* |
|00001cf0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d00| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d10| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d20| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d30| 20 20 20 20 20 2a 29 0a | 2d 20 20 28 2a 20 3c 73 | *).|- (* <s|
|00001d40| 65 74 20 5b 5b 73 65 72 | 76 65 72 2e 68 6f 73 74 |et [[ser|ver.host|
|00001d50| 6e 61 6d 65 5d 5d 20 66 | 72 6f 6d 20 5b 5b 68 6f |name]] f|rom [[ho|
|00001d60| 73 74 62 75 66 5d 5d 3e | 3d 20 20 20 20 20 20 20 |stbuf]]>|= |
|00001d70| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00001d80| 20 20 20 20 20 20 20 2a | 29 0a 2d 20 20 56 41 52 | *|).- VAR|
|00001d90| 20 69 20 3a 3d 20 30 3b | 0a 2d 20 20 42 45 47 49 | i := 0;|.- BEGI|
|00001da0| 4e 0a 2d 20 20 20 20 57 | 48 49 4c 45 20 69 20 3c |N.- W|HILE i <|
|00001db0| 20 4e 55 4d 42 45 52 28 | 68 6f 73 74 62 75 66 29 | NUMBER(|hostbuf)|
|00001dc0| 20 41 4e 44 20 68 6f 73 | 74 62 75 66 5b 69 5d 20 | AND hos|tbuf[i] |
|00001dd0| 23 20 27 5c 30 30 30 27 | 20 44 4f 20 49 4e 43 28 |# '\000'| DO INC(|
|00001de0| 69 29 20 45 4e 44 3b 0a | 2d 20 20 20 20 73 65 72 |i) END;.|- ser|
|00001df0| 76 65 72 2e 68 6f 73 74 | 6e 61 6d 65 20 3a 3d 20 |ver.host|name := |
|00001e00| 54 65 78 74 2e 46 72 6f | 6d 43 68 61 72 73 28 53 |Text.Fro|mChars(S|
|00001e10| 55 42 41 52 52 41 59 28 | 68 6f 73 74 62 75 66 2c |UBARRAY(|hostbuf,|
|00001e20| 20 30 2c 20 69 29 29 3b | 0a 2d 20 20 45 4e 44 3b | 0, i));|.- END;|
|00001e30| 0a 2d 20 20 73 65 72 76 | 65 72 2e 73 65 72 76 65 |.- serv|er.serve|
|00001e40| 72 2e 73 69 6e 5f 66 61 | 6d 69 6c 79 20 3a 3d 20 |r.sin_fa|mily := |
|00001e50| 55 73 6f 63 6b 65 74 2e | 41 46 5f 49 4e 45 54 3b |Usocket.|AF_INET;|
|00001e60| 0a 2d 20 20 73 65 72 76 | 65 72 2e 73 65 72 76 65 |.- serv|er.serve|
|00001e70| 72 2e 73 69 6e 5f 61 64 | 64 72 2e 73 5f 61 64 64 |r.sin_ad|dr.s_add|
|00001e80| 72 20 3a 3d 20 55 69 6e | 2e 49 4e 41 44 44 52 5f |r := Uin|.INADDR_|
|00001e90| 41 4e 59 3b 0a 2d 20 20 | 73 65 72 76 65 72 2e 73 |ANY;.- |server.s|
|00001ea0| 65 72 76 65 72 2e 73 69 | 6e 5f 70 6f 72 74 20 3a |erver.si|n_port :|
|00001eb0| 3d 20 55 69 6e 2e 68 74 | 6f 6e 73 28 70 6f 72 74 |= Uin.ht|ons(port|
|00001ec0| 29 3b 0a 2d 20 20 49 46 | 20 55 73 6f 63 6b 65 74 |);.- IF| Usocket|
|00001ed0| 2e 62 69 6e 64 28 73 65 | 72 76 65 72 2e 73 6f 63 |.bind(se|rver.soc|
|00001ee0| 6b 2c 20 41 44 52 28 73 | 65 72 76 65 72 2e 73 65 |k, ADR(s|erver.se|
|00001ef0| 72 76 65 72 29 2c 20 42 | 59 54 45 53 49 5a 45 28 |rver), B|YTESIZE(|
|00001f00| 73 65 72 76 65 72 2e 73 | 65 72 76 65 72 29 29 20 |server.s|erver)) |
|00001f10| 23 20 30 20 54 48 45 4e | 20 0a 2d 20 20 20 20 55 |# 0 THEN| .- U|
|00001f20| 6e 69 78 45 72 72 6f 72 | 2e 46 61 69 6c 28 22 62 |nixError|.Fail("b|
|00001f30| 69 6e 64 69 6e 67 20 73 | 6f 63 6b 65 74 22 29 3b |inding s|ocket");|
|00001f40| 0a 2d 20 20 45 4e 44 3b | 0a 2d 20 20 56 41 52 20 |.- END;|.- VAR |
|00001f50| 6c 65 6e 67 74 68 20 3a | 3d 20 42 59 54 45 53 49 |length :|= BYTESI|
|00001f60| 5a 45 28 73 65 72 76 65 | 72 2e 73 65 72 76 65 72 |ZE(serve|r.server|
|00001f70| 29 3b 0a 2d 20 20 42 45 | 47 49 4e 0a 2d 20 20 20 |);.- BE|GIN.- |
|00001f80| 20 49 46 20 55 73 6f 63 | 6b 65 74 2e 67 65 74 73 | IF Usoc|ket.gets|
|00001f90| 6f 63 6b 6e 61 6d 65 28 | 73 65 72 76 65 72 2e 73 |ockname(|server.s|
|00001fa0| 6f 63 6b 2c 20 41 44 52 | 28 73 65 72 76 65 72 2e |ock, ADR|(server.|
|00001fb0| 73 65 72 76 65 72 29 2c | 20 41 44 52 28 6c 65 6e |server),| ADR(len|
|00001fc0| 67 74 68 29 29 20 23 20 | 30 20 54 48 45 4e 0a 2d |gth)) # |0 THEN.-|
|00001fd0| 20 20 20 20 20 20 55 6e | 69 78 45 72 72 6f 72 2e | Un|ixError.|
|00001fe0| 46 61 69 6c 28 22 67 65 | 74 73 6f 63 6b 6e 61 6d |Fail("ge|tsocknam|
|00001ff0| 65 22 29 3b 0a 2d 20 20 | 20 20 45 4e 44 3b 0a 2d |e");.- | END;.-|
|00002000| 20 20 45 4e 44 3b 0a 2d | 20 20 73 65 72 76 65 72 | END;.-| server|
|00002010| 2e 70 6f 72 74 20 3a 3d | 20 55 69 6e 2e 6e 74 6f |.port :=| Uin.nto|
|00002020| 68 73 28 73 65 72 76 65 | 72 2e 73 65 72 76 65 72 |hs(serve|r.server|
|00002030| 2e 73 69 6e 5f 70 6f 72 | 74 29 3b 0a 2d 20 20 49 |.sin_por|t);.- I|
|00002040| 46 20 55 73 6f 63 6b 65 | 74 2e 6c 69 73 74 65 6e |F Usocke|t.listen|
|00002050| 28 73 65 72 76 65 72 2e | 73 6f 63 6b 2c 20 35 29 |(server.|sock, 5)|
|00002060| 20 23 20 30 20 54 48 45 | 4e 20 55 6e 69 78 45 72 | # 0 THE|N UnixEr|
|00002070| 72 6f 72 2e 46 61 69 6c | 28 22 6c 69 73 74 65 6e |ror.Fail|("listen|
|00002080| 22 29 20 45 4e 44 3b 0a | 2d 20 20 52 45 54 55 52 |") END;.|- RETUR|
|00002090| 4e 20 73 65 72 76 65 72 | 3b 0a 2d 45 4e 44 20 53 |N server|;.-END S|
|000020a0| 65 72 76 65 3b 0a 2d 28 | 2a 20 54 6f 20 61 76 6f |erve;.-(|* To avo|
|000020b0| 69 64 20 62 6c 6f 63 6b | 69 6e 67 20 74 68 65 20 |id block|ing the |
|000020c0| 65 6e 74 69 72 65 20 61 | 64 64 72 65 73 73 20 73 |entire a|ddress s|
|000020d0| 70 61 63 65 20 6f 6e 20 | 74 68 65 20 5b 5b 61 63 |pace on |the [[ac|
|000020e0| 63 65 70 74 5d 5d 20 73 | 79 73 74 65 6d 20 20 20 |cept]] s|ystem |
|000020f0| 20 20 20 2a 29 0a 2d 28 | 2a 20 63 61 6c 6c 2c 20 | *).-(|* call, |
|00002100| 5b 5b 41 63 63 65 70 74 | 5d 5d 20 63 61 6c 6c 73 |[[Accept|]] calls|
|00002110| 20 5b 5b 73 65 6c 65 63 | 74 5d 5d 20 66 69 72 73 | [[selec|t]] firs|
|00002120| 74 2e 20 20 42 65 63 61 | 75 73 65 20 74 68 65 20 |t. Beca|use the |
|00002130| 73 6f 63 6b 65 74 20 69 | 73 20 68 69 64 64 65 6e |socket i|s hidden|
|00002140| 20 20 20 2a 29 0a 2d 28 | 2a 20 77 69 74 68 69 6e | *).-(|* within|
|00002150| 20 74 68 65 20 5b 5b 4e | 65 74 77 6f 72 6b 2e 53 | the [[N|etwork.S|
|00002160| 65 72 76 65 72 5d 5d 2c | 20 61 6e 64 20 62 65 63 |erver]],| and bec|
|00002170| 61 75 73 65 20 74 68 69 | 73 20 63 6f 64 65 20 69 |ause thi|s code i|
|00002180| 73 20 70 72 6f 74 65 63 | 74 65 64 20 62 79 20 20 |s protec|ted by |
|00002190| 20 20 20 2a 29 0a 2d 28 | 2a 20 74 68 65 20 6d 75 | *).-(|* the mu|
|000021a0| 74 65 78 2c 20 6f 74 68 | 65 72 20 63 6f 64 65 20 |tex, oth|er code |
|000021b0| 63 61 6e 27 74 20 67 65 | 74 20 69 6e 20 61 6e 64 |can't ge|t in and|
|000021c0| 20 61 63 63 65 70 74 20 | 74 68 65 20 63 6f 6e 6e | accept |the conn|
|000021d0| 65 63 74 69 6f 6e 20 62 | 65 74 77 65 65 6e 20 20 |ection b|etween |
|000021e0| 20 20 20 2a 29 0a 2d 28 | 2a 20 74 68 65 20 74 69 | *).-(|* the ti|
|000021f0| 6d 65 20 5b 5b 73 65 6c | 65 63 74 5d 5d 20 72 65 |me [[sel|ect]] re|
|00002200| 74 75 72 6e 73 20 61 6e | 64 20 74 68 65 20 63 6f |turns an|d the co|
|00002210| 6e 6e 65 63 74 69 6f 6e | 20 69 73 20 61 63 63 65 |nnection| is acce|
|00002220| 70 74 65 64 2e 20 20 20 | 20 20 20 20 20 20 20 20 |pted. | |
|00002230| 20 20 20 2a 29 0a 2d 28 | 2a 20 20 20 20 20 20 20 | *).-(|* |
|00002240| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002250| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002260| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002270| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002280| 20 20 20 2a 29 0a 2d 28 | 2a 20 4e 6f 72 6d 61 6c | *).-(|* Normal|
|00002290| 20 75 73 61 67 65 20 69 | 73 20 74 6f 20 66 6f 72 | usage i|s to for|
|000022a0| 6b 20 61 20 74 68 72 65 | 61 64 20 74 68 61 74 20 |k a thre|ad that |
|000022b0| 6c 6f 6f 70 73 20 61 6e | 64 20 63 61 6c 6c 73 20 |loops an|d calls |
|000022c0| 5b 5b 41 63 63 65 70 74 | 5d 5d 20 20 20 20 20 20 |[[Accept|]] |
|000022d0| 20 20 20 2a 29 0a 2d 28 | 2a 20 63 6f 6e 74 69 6e | *).-(|* contin|
|000022e0| 75 61 6c 6c 79 2e 20 20 | 54 68 65 20 74 68 72 65 |ually. |The thre|
|000022f0| 61 64 20 63 61 6e 20 62 | 65 20 73 74 6f 70 70 65 |ad can b|e stoppe|
|00002300| 64 20 62 79 20 61 6c 65 | 72 74 69 6e 67 20 69 74 |d by ale|rting it|
|00002310| 2e 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |. | |
|00002320| 20 20 20 2a 29 0a 2d 28 | 2a 20 20 20 20 20 20 20 | *).-(|* |
|00002330| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002340| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002350| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002360| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002370| 20 20 20 2a 29 0a 2d 28 | 2a 20 3c 74 6f 70 6c 65 | *).-(|* <tople|
|00002380| 76 65 6c 3e 3d 20 20 20 | 20 20 20 20 20 20 20 20 |vel>= | |
|00002390| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000023a0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000023b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000023c0| 20 20 20 2a 29 0a 2d 50 | 52 4f 43 45 44 55 52 45 | *).-P|ROCEDURE|
|000023d0| 20 41 63 63 65 70 74 28 | 73 65 72 76 65 72 3a 20 | Accept(|server: |
|000023e0| 53 65 72 76 65 72 29 3a | 54 20 52 41 49 53 45 53 |Server):|T RAISES|
|000023f0| 20 7b 55 6e 69 78 45 72 | 72 6f 72 2e 45 2c 20 54 | {UnixEr|ror.E, T|
|00002400| 68 72 65 61 64 2e 41 6c | 65 72 74 65 64 7d 20 3d |hread.Al|erted} =|
|00002410| 0a 2d 56 41 52 20 73 6f | 63 6b 20 3a 20 49 4e 54 |.-VAR so|ck : INT|
|00002420| 45 47 45 52 3b 0a 2d 20 | 20 20 20 72 65 61 64 73 |EGER;.- | reads|
|00002430| 20 3a 3d 20 55 6e 69 78 | 2e 46 44 53 65 74 20 7b | := Unix|.FDSet {|
|00002440| 20 73 65 72 76 65 72 2e | 73 6f 63 6b 20 7d 3b 0a | server.|sock };.|
|00002450| 2d 42 45 47 49 4e 0a 2d | 20 20 4c 4f 43 4b 20 73 |-BEGIN.-| LOCK s|
|00002460| 65 72 76 65 72 20 44 4f | 0a 2d 20 20 20 20 49 46 |erver DO|.- IF|
|00002470| 20 52 54 53 63 68 65 64 | 75 6c 65 72 2e 49 4f 41 | RTSched|uler.IOA|
|00002480| 6c 65 72 74 53 65 6c 65 | 63 74 28 73 65 72 76 65 |lertSele|ct(serve|
|00002490| 72 2e 73 6f 63 6b 20 2b | 20 31 2c 20 41 44 52 28 |r.sock +| 1, ADR(|
|000024a0| 72 65 61 64 73 29 2c 20 | 4e 49 4c 2c 20 4e 49 4c |reads), |NIL, NIL|
|000024b0| 29 20 3c 20 30 20 54 48 | 45 4e 0a 2d 20 20 20 20 |) < 0 TH|EN.- |
|000024c0| 20 20 55 6e 69 78 45 72 | 72 6f 72 2e 46 61 69 6c | UnixEr|ror.Fail|
|000024d0| 28 22 73 65 6c 65 63 74 | 22 29 3b 0a 2d 20 20 20 |("select|");.- |
|000024e0| 20 45 4e 44 3b 0a 2d 20 | 20 20 20 73 6f 63 6b 20 | END;.- | sock |
|000024f0| 3a 3d 20 55 73 6f 63 6b | 65 74 2e 61 63 63 65 70 |:= Usock|et.accep|
|00002500| 74 28 73 65 72 76 65 72 | 2e 73 6f 63 6b 2c 20 4e |t(server|.sock, N|
|00002510| 49 4c 2c 20 4e 49 4c 29 | 3b 0a 2d 20 20 20 20 49 |IL, NIL)|;.- I|
|00002520| 46 20 73 6f 63 6b 20 3c | 20 30 20 54 48 45 4e 20 |F sock <| 0 THEN |
|00002530| 55 6e 69 78 45 72 72 6f | 72 2e 46 61 69 6c 28 22 |UnixErro|r.Fail("|
|00002540| 61 63 63 65 70 74 69 6e | 67 20 73 6f 63 6b 65 74 |acceptin|g socket|
|00002550| 20 63 6f 6e 6e 65 63 74 | 69 6f 6e 22 29 20 45 4e | connect|ion") EN|
|00002560| 44 3b 0a 2d 20 20 20 20 | 52 45 54 55 52 4e 20 46 |D;.- |RETURN F|
|00002570| 72 6f 6d 46 44 28 73 6f | 63 6b 29 3b 0a 2d 20 20 |romFD(so|ck);.- |
|00002580| 45 4e 44 3b 0a 2d 45 4e | 44 20 41 63 63 65 70 74 |END;.-EN|D Accept|
|00002590| 3b 0a 2d 42 45 47 49 4e | 0a 2d 45 4e 44 20 4e 65 |;.-BEGIN|.-END Ne|
|000025a0| 74 77 6f 72 6b 2e 0a 45 | 6e 64 20 6f 66 20 4e 65 |twork..E|nd of Ne|
|000025b0| 74 77 6f 72 6b 2e 6d 33 | 0a 65 63 68 6f 20 55 6e |twork.m3|.echo Un|
|000025c0| 69 78 45 72 72 6f 72 2e | 69 33 20 31 3e 26 32 0a |ixError.|i3 1>&2.|
|000025d0| 73 65 64 20 27 73 2f 5e | 2d 2f 2f 27 20 3e 27 55 |sed 's/^|-//' >'U|
|000025e0| 6e 69 78 45 72 72 6f 72 | 2e 69 33 27 20 3c 3c 27 |nixError|.i3' <<'|
|000025f0| 45 6e 64 20 6f 66 20 55 | 6e 69 78 45 72 72 6f 72 |End of U|nixError|
|00002600| 2e 69 33 27 0a 2d 28 2a | 20 5b 5b 55 6e 69 78 45 |.i3'.-(*| [[UnixE|
|00002610| 72 72 6f 72 2e 46 61 69 | 6c 5d 5d 20 65 6e 63 61 |rror.Fai|l]] enca|
|00002620| 70 73 75 6c 61 74 65 73 | 20 74 68 65 20 6e 6f 72 |psulates| the nor|
|00002630| 6d 61 6c 20 61 63 74 69 | 6f 6e 20 74 61 6b 65 6e |mal acti|on taken|
|00002640| 20 77 68 65 6e 20 20 20 | 20 20 20 20 20 20 20 20 | when | |
|00002650| 20 20 2a 29 0a 2d 28 2a | 20 61 20 55 6e 69 78 20 | *).-(*| a Unix |
|00002660| 73 79 73 74 65 6d 20 63 | 61 6c 6c 20 66 61 69 6c |system c|all fail|
|00002670| 73 2e 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |s. | |
|00002680| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002690| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000026a0| 20 20 2a 29 0a 2d 28 2a | 20 20 20 20 20 20 20 20 | *).-(*| |
|000026b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000026c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000026d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000026e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000026f0| 20 20 2a 29 0a 2d 28 2a | 20 3c 69 6e 74 65 72 66 | *).-(*| <interf|
|00002700| 61 63 65 3e 3d 20 20 20 | 20 20 20 20 20 20 20 20 |ace>= | |
|00002710| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002720| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002730| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002740| 20 20 2a 29 0a 2d 49 4e | 54 45 52 46 41 43 45 20 | *).-IN|TERFACE |
|00002750| 55 6e 69 78 45 72 72 6f | 72 3b 0a 2d 0a 2d 54 59 |UnixErro|r;.-.-TY|
|00002760| 50 45 0a 2d 20 20 45 72 | 65 63 20 3d 20 52 45 43 |PE.- Er|ec = REC|
|00002770| 4f 52 44 20 6d 73 67 3a | 20 54 45 58 54 20 3a 3d |ORD msg:| TEXT :=|
|00002780| 20 4e 49 4c 3b 20 65 72 | 72 6e 6f 20 3a 20 49 4e | NIL; er|rno : IN|
|00002790| 54 45 47 45 52 20 45 4e | 44 3b 0a 2d 0a 2d 45 58 |TEGER EN|D;.-.-EX|
|000027a0| 43 45 50 54 49 4f 4e 20 | 45 28 45 72 65 63 29 3b |CEPTION |E(Erec);|
|000027b0| 0a 2d 0a 2d 50 52 4f 43 | 45 44 55 52 45 20 46 61 |.-.-PROC|EDURE Fa|
|000027c0| 69 6c 28 6d 73 67 20 3a | 20 54 45 58 54 20 3a 3d |il(msg :| TEXT :=|
|000027d0| 20 4e 49 4c 3b 20 65 72 | 72 6e 6f 20 3a 3d 20 30 | NIL; er|rno := 0|
|000027e0| 29 20 52 41 49 53 45 53 | 20 7b 45 7d 3b 0a 2d 20 |) RAISES| {E};.- |
|000027f0| 20 28 2a 20 63 68 65 63 | 6b 20 74 68 65 20 72 65 | (* chec|k the re|
|00002800| 61 6c 20 65 72 72 6e 6f | 2c 20 61 64 64 20 61 6e |al errno|, add an|
|00002810| 20 61 70 70 72 6f 70 72 | 69 61 74 65 20 6d 65 73 | appropr|iate mes|
|00002820| 73 61 67 65 2c 20 61 6e | 64 20 52 41 49 53 45 20 |sage, an|d RAISE |
|00002830| 45 20 2a 29 0a 2d 0a 2d | 45 4e 44 20 55 6e 69 78 |E *).-.-|END Unix|
|00002840| 45 72 72 6f 72 2e 0a 45 | 6e 64 20 6f 66 20 55 6e |Error..E|nd of Un|
|00002850| 69 78 45 72 72 6f 72 2e | 69 33 0a 65 63 68 6f 20 |ixError.|i3.echo |
|00002860| 55 6e 69 78 45 72 72 6f | 72 2e 6d 33 20 31 3e 26 |UnixErro|r.m3 1>&|
|00002870| 32 0a 73 65 64 20 27 73 | 2f 5e 2d 2f 2f 27 20 3e |2.sed 's|/^-//' >|
|00002880| 27 55 6e 69 78 45 72 72 | 6f 72 2e 6d 33 27 20 3c |'UnixErr|or.m3' <|
|00002890| 3c 27 45 6e 64 20 6f 66 | 20 55 6e 69 78 45 72 72 |<'End of| UnixErr|
|000028a0| 6f 72 2e 6d 33 27 0a 2d | 28 2a 20 3c 2a 3e 3d 20 |or.m3'.-|(* <*>= |
|000028b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000028c0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000028d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000028e0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|000028f0| 20 20 20 20 2a 29 0a 2d | 55 4e 53 41 46 45 20 4d | *).-|UNSAFE M|
|00002900| 4f 44 55 4c 45 20 55 6e | 69 78 45 72 72 6f 72 3b |ODULE Un|ixError;|
|00002910| 0a 2d 49 4d 50 4f 52 54 | 20 4d 33 74 6f 43 2c 20 |.-IMPORT| M3toC, |
|00002920| 55 65 72 72 6f 72 3b 0a | 2d 0a 2d 50 52 4f 43 45 |Uerror;.|-.-PROCE|
|00002930| 44 55 52 45 20 46 61 69 | 6c 28 6d 73 67 20 3a 20 |DURE Fai|l(msg : |
|00002940| 54 45 58 54 20 3a 3d 20 | 4e 49 4c 3b 20 65 6e 20 |TEXT := |NIL; en |
|00002950| 3a 3d 20 30 29 20 52 41 | 49 53 45 53 20 7b 45 7d |:= 0) RA|ISES {E}|
|00002960| 20 3d 0a 2d 42 45 47 49 | 4e 0a 2d 20 20 49 46 20 | =.-BEGI|N.- IF |
|00002970| 65 6e 20 3d 20 30 20 54 | 48 45 4e 20 65 6e 20 3a |en = 0 T|HEN en :|
|00002980| 3d 20 55 65 72 72 6f 72 | 2e 65 72 72 6e 6f 20 45 |= Uerror|.errno E|
|00002990| 4e 44 3b 0a 2d 20 20 57 | 49 54 48 20 73 79 73 65 |ND;.- W|ITH syse|
|000029a0| 72 72 20 3d 20 4d 33 74 | 6f 43 2e 53 74 6f 54 28 |rr = M3t|oC.StoT(|
|000029b0| 55 65 72 72 6f 72 2e 47 | 65 74 46 72 6f 6d 5f 73 |Uerror.G|etFrom_s|
|000029c0| 79 73 5f 65 72 72 6c 69 | 73 74 28 65 6e 29 29 20 |ys_errli|st(en)) |
|000029d0| 44 4f 0a 2d 20 20 20 20 | 49 46 20 6d 73 67 20 3d |DO.- |IF msg =|
|000029e0| 20 4e 49 4c 20 54 48 45 | 4e 20 6d 73 67 20 3a 3d | NIL THE|N msg :=|
|000029f0| 20 73 79 73 65 72 72 20 | 45 4c 53 45 20 6d 73 67 | syserr |ELSE msg|
|00002a00| 20 3a 3d 20 6d 73 67 20 | 26 20 22 3a 20 22 20 26 | := msg |& ": " &|
|00002a10| 20 73 79 73 65 72 72 20 | 45 4e 44 3b 0a 2d 20 20 | syserr |END;.- |
|00002a20| 45 4e 44 3b 0a 2d 20 20 | 52 41 49 53 45 20 45 28 |END;.- |RAISE E(|
|00002a30| 45 72 65 63 7b 6d 73 67 | 2c 20 65 6e 7d 29 3b 0a |Erec{msg|, en});.|
|00002a40| 2d 45 4e 44 20 46 61 69 | 6c 3b 0a 2d 0a 2d 42 45 |-END Fai|l;.-.-BE|
|00002a50| 47 49 4e 0a 2d 45 4e 44 | 20 55 6e 69 78 45 72 72 |GIN.-END| UnixErr|
|00002a60| 6f 72 2e 0a 45 6e 64 20 | 6f 66 20 55 6e 69 78 45 |or..End |of UnixE|
|00002a70| 72 72 6f 72 2e 6d 33 0a | |rror.m3.| |
+--------+-------------------------+-------------------------+--------+--------+