1 | UNIT SockApi;
|
---|
2 |
|
---|
3 | INTERFACE
|
---|
4 |
|
---|
5 | CONST
|
---|
6 | SOCK_STREAM =1; /* stream socket */
|
---|
7 | SOCK_DGRAM =2; /* datagram socket */
|
---|
8 | SOCK_RAW =3; /* raw-protocol interface */
|
---|
9 | SOCK_RDM =4; /* reliably-delivered message */
|
---|
10 | SOCK_SEQPACKET =5; /* sequenced packet stream */
|
---|
11 |
|
---|
12 | /*
|
---|
13 | * Option flags per-socket.
|
---|
14 | */
|
---|
15 | SO_DEBUG =$0001; /* turn on debugging info recording */
|
---|
16 | SO_ACCEPTCONN =$0002; /* socket has had listen() */
|
---|
17 | SO_REUSEADDR =$0004; /* allow local address reuse */
|
---|
18 | SO_KEEPALIVE =$0008; /* keep connections alive */
|
---|
19 | SO_DONTROUTE =$0010; /* just use interface addresses */
|
---|
20 | SO_BROADCAST =$0020; /* permit sending of broadcast msgs */
|
---|
21 | SO_USELOOPBACK =$0040; /* bypass hardware when possible */
|
---|
22 | SO_LINGER =$0080; /* linger on close if data present */
|
---|
23 | SO_OOBINLINE =$0100; /* leave received OOB data in line */
|
---|
24 |
|
---|
25 | /*
|
---|
26 | * Additional options, not kept in so_options.
|
---|
27 | */
|
---|
28 | SO_SNDBUF =$1001; /* send buffer size */
|
---|
29 | SO_RCVBUF =$1002; /* receive buffer size */
|
---|
30 | SO_SNDLOWAT =$1003; /* send low-water mark */
|
---|
31 | SO_RCVLOWAT =$1004; /* receive low-water mark */
|
---|
32 | SO_SNDTIMEO =$1005; /* send timeout */
|
---|
33 | SO_RCVTIMEO =$1006; /* receive timeout */
|
---|
34 | SO_ERROR =$1007; /* get error status and clear */
|
---|
35 | SO_TYPE =$1008; /* get socket type */
|
---|
36 |
|
---|
37 | /*
|
---|
38 | * Structure used for manipulating linger option.
|
---|
39 | */
|
---|
40 | TYPE
|
---|
41 | linger=RECORD
|
---|
42 | l_onoff:LONGINT; /* option on/off */
|
---|
43 | l_linger:LONGINT; /* linger time */
|
---|
44 | END;
|
---|
45 |
|
---|
46 | /*
|
---|
47 | * Level number for (get/set)sockopt() to apply to socket itself.
|
---|
48 | */
|
---|
49 | CONST
|
---|
50 | SOL_SOCKET =$ffff; /* options for socket level */
|
---|
51 |
|
---|
52 | /*
|
---|
53 | * Address families.
|
---|
54 | */
|
---|
55 | CONST
|
---|
56 | AF_UNSPEC =0; /* unspecified */
|
---|
57 | AF_UNIX =1; /* local to host (pipes, portals) */
|
---|
58 | AF_INET =2; /* internetwork: UDP, TCP, etc. */
|
---|
59 | AF_IMPLINK =3; /* arpanet imp addresses */
|
---|
60 | AF_PUP =4; /* pup protocols: e.g. BSP */
|
---|
61 | AF_CHAOS =5; /* mit CHAOS protocols */
|
---|
62 | AF_NS =6; /* XEROX NS protocols */
|
---|
63 | AF_NBS =7; /* nbs protocols */
|
---|
64 | AF_ECMA =8; /* european computer manufacturers */
|
---|
65 | AF_DATAKIT =9; /* datakit protocols */
|
---|
66 | AF_CCITT =10; /* CCITT protocols, X.25 etc */
|
---|
67 | AF_SNA =11; /* IBM SNA */
|
---|
68 | AF_DECnet =12; /* DECnet */
|
---|
69 | AF_DLI =13; /* Direct data link interface */
|
---|
70 | AF_LAT =14; /* LAT */
|
---|
71 | AF_HYLINK =15; /* NSC Hyperchannel */
|
---|
72 | AF_APPLETALK =16; /* Apple Talk */
|
---|
73 |
|
---|
74 | AF_MAX =17;
|
---|
75 |
|
---|
76 | /*
|
---|
77 | * Structure used by kernel to store most
|
---|
78 | * addresses.
|
---|
79 | */
|
---|
80 | TYPE
|
---|
81 | sockaddr=RECORD
|
---|
82 | sa_family:WORD; /* address family */
|
---|
83 | sa_data:CSTRING[13]; /* up to 14 bytes of direct address */
|
---|
84 | END;
|
---|
85 |
|
---|
86 | /*
|
---|
87 | * Structure used by kernel to pass protocol
|
---|
88 | * information in raw sockets.
|
---|
89 | */
|
---|
90 | sockproto=RECORD
|
---|
91 | sp_family:WORD; /* address family */
|
---|
92 | sp_protocol:WORD; /* protocol */
|
---|
93 | END;
|
---|
94 |
|
---|
95 | /*
|
---|
96 | * Protocol families, same as address families for now.
|
---|
97 | */
|
---|
98 | CONST
|
---|
99 | PF_UNSPEC =AF_UNSPEC;
|
---|
100 | PF_UNIX =AF_UNIX;
|
---|
101 | PF_INET =AF_INET;
|
---|
102 | PF_IMPLINK =AF_IMPLINK;
|
---|
103 | PF_PUP =AF_PUP;
|
---|
104 | PF_CHAOS =AF_CHAOS;
|
---|
105 | PF_NS =AF_NS;
|
---|
106 | PF_NBS =AF_NBS;
|
---|
107 | PF_ECMA =AF_ECMA;
|
---|
108 | PF_DATAKIT =AF_DATAKIT;
|
---|
109 | PF_CCITT =AF_CCITT;
|
---|
110 | PF_SNA =AF_SNA;
|
---|
111 | PF_DECnet =AF_DECnet;
|
---|
112 | PF_DLI =AF_DLI;
|
---|
113 | PF_LAT =AF_LAT;
|
---|
114 | PF_HYLINK =AF_HYLINK;
|
---|
115 | PF_APPLETALK =AF_APPLETALK;
|
---|
116 |
|
---|
117 | PF_MAX =AF_MAX;
|
---|
118 |
|
---|
119 | /*
|
---|
120 | * Maximum queue length specifiable by listen.
|
---|
121 | */
|
---|
122 | SOMAXCONN =5;
|
---|
123 |
|
---|
124 | /*
|
---|
125 | * Message header for recvmsg and sendmsg calls.
|
---|
126 | */
|
---|
127 | TYPE
|
---|
128 | iovec=RECORD
|
---|
129 | iov_base:PChar;
|
---|
130 | iov_len:LONGINT;
|
---|
131 | END;
|
---|
132 |
|
---|
133 | uio=RECORD
|
---|
134 | uio_iov:^iovec;
|
---|
135 | uio_iovcnt:LONGINT;
|
---|
136 | uio_offset:LONGINT;
|
---|
137 | uio_segflg:LONGINT;
|
---|
138 | uio_resid:LONGINT;
|
---|
139 | END;
|
---|
140 |
|
---|
141 | uio_rw =(UIO_READ, UIO_WRITE );
|
---|
142 |
|
---|
143 | msghdr=RECORD
|
---|
144 | msg_name:PChar; /* optional address */
|
---|
145 | msg_namelen:LONGINT; /* size of address */
|
---|
146 | msg_iov:^iovec; /* scatter/gather array */
|
---|
147 | msg_iovlen:LONGINT; /* # elements in msg_iov */
|
---|
148 | msg_accrights:PChar; /* access rights sent/received */
|
---|
149 | msg_accrightslen:LONGINT;
|
---|
150 | END;
|
---|
151 |
|
---|
152 | CONST
|
---|
153 | FREAD =1;
|
---|
154 | FWRITE =2;
|
---|
155 |
|
---|
156 | MSG_OOB =$1; /* process out-of-band data */
|
---|
157 | MSG_PEEK =$2; /* peek at incoming message */
|
---|
158 | MSG_DONTROUTE =$4; /* send without using routing tables */
|
---|
159 |
|
---|
160 | MSG_MAXIOVLEN =16;
|
---|
161 |
|
---|
162 | IMPORTS
|
---|
163 |
|
---|
164 | FUNCTION accept( p1:LONGINT;VAR sa:sockaddr;var p2:LONGINT):LONGINT;
|
---|
165 | APIENTRY; 'SO32DLL' index 1;
|
---|
166 | FUNCTION bind( p1:LONGINT;VAR sa:sockaddr;p2:LONGINT):LONGINT;
|
---|
167 | APIENTRY; 'SO32DLL' index 2;
|
---|
168 | FUNCTION connect( p1:LONGINT;VAR sa:sockaddr;p2:LONGINT ):LONGINT;
|
---|
169 | APIENTRY; 'SO32DLL' index 3;
|
---|
170 | FUNCTION gethostid:LONGINT;
|
---|
171 | APIENTRY; 'SO32DLL' index 4;
|
---|
172 | FUNCTION getpeername(p1:LONGINT;VAR sa:sockaddr;VAR p2:LONGINT):LONGINT;
|
---|
173 | APIENTRY; 'SO32DLL' index 5;
|
---|
174 | FUNCTION getsockname(p1:LONGINT;VAR sa:sockaddr;VAR p2:LONGINT):LONGINT;
|
---|
175 | APIENTRY; 'SO32DLL' index 6;
|
---|
176 | FUNCTION getsockopt(p1,p2,p3:LONGINT;VAR c:CSTRING;VAR p4:LONGINT):LONGINT;
|
---|
177 | APIENTRY; 'SO32DLL' index 7;
|
---|
178 | FUNCTION ioctl(p1,p2:LONGINT;VAR c:CSTRING;p3:LONGINT):LONGINT;
|
---|
179 | APIENTRY; 'SO32DLL' index 8;
|
---|
180 | FUNCTION listen(p1,p2:LONGINT):LONGINT;
|
---|
181 | APIENTRY; 'SO32DLL' index 9;
|
---|
182 | FUNCTION recvmsg(p1:LONGINT;VAR mh:msghdr;p2:LONGINT):LONGINT;
|
---|
183 | APIENTRY; 'SO32DLL' index 21;
|
---|
184 | FUNCTION recv( p1:LONGINT;VAR c:CSTRING;p2,p3:LONGINT ):LONGINT;
|
---|
185 | APIENTRY; 'SO32DLL' index 10;
|
---|
186 | FUNCTION recvfrom(p1:LONGINT;VAR c:CSTRING;p2,p3:LONGINT;VAR sa:sockaddr;VAR p4:LONGINT):LONGINT;
|
---|
187 | APIENTRY; 'SO32DLL' index 11;
|
---|
188 | FUNCTION select(VAR p1:LONGINT;p2,p3,p4,p5:LONGINT):LONGINT;
|
---|
189 | APIENTRY; 'SO32DLL' index 12;
|
---|
190 | FUNCTION send(p1:LONGINT;VAR c:CSTRING;p2,p3:LONGINT):LONGINT;
|
---|
191 | APIENTRY; 'SO32DLL' index 13;
|
---|
192 | FUNCTION sendmsg(p1:LONGINT;VAR mh:msghdr;p2:LONGINT):LONGINT;
|
---|
193 | APIENTRY; 'SO32DLL' index 22;
|
---|
194 | FUNCTION sendto(p1:LONGINT;VAR c:CSTRING;p2,p3:LONGINT;VAR sa:sockaddr;p4:LONGINT):LONGINT;
|
---|
195 | APIENTRY; 'SO32DLL' index 14;
|
---|
196 | FUNCTION setsockopt(p1,p2,p3:LONGINT;VAR c:CSTRING;p4:LONGINT):LONGINT;
|
---|
197 | APIENTRY; 'SO32DLL' index 15;
|
---|
198 | FUNCTION sock_init:LONGINT;
|
---|
199 | APIENTRY; 'SO32DLL' index 26;
|
---|
200 | FUNCTION sock_errno:LONGINT;
|
---|
201 | APIENTRY; 'SO32DLL' index 20;
|
---|
202 | FUNCTION psock_errno(CONST c:CSTRING):LONGINT;
|
---|
203 | APIENTRY; 'SO32DLL' index 30;
|
---|
204 | FUNCTION socket(p1,p2,p3:LONGINT):LONGINT;
|
---|
205 | APIENTRY; 'SO32DLL' index 16;
|
---|
206 | FUNCTION soclose( p1:LONGINT ):LONGINT;
|
---|
207 | APIENTRY; 'SO32DLL' index 17;
|
---|
208 | FUNCTION soabort(p1:LONGINT):LONGINT;
|
---|
209 | APIENTRY; 'SO32DLL' index 19;
|
---|
210 | FUNCTION so_cancel(p1:LONGINT):LONGINT;
|
---|
211 | APIENTRY; 'SO32DLL' index 18;
|
---|
212 | FUNCTION readv(p1:LONGINT;VAR io:iovec;p2:LONGINT):LONGINT;
|
---|
213 | APIENTRY; 'SO32DLL' index 23;
|
---|
214 | FUNCTION writev(p1:LONGINT;VAR io:iovec;p2:LONGINT):LONGINT;
|
---|
215 | APIENTRY; 'SO32DLL' index 24;
|
---|
216 | FUNCTION shutdown(p1,p2:LONGINT):LONGINT;
|
---|
217 | APIENTRY; 'SO32DLL' index 25;
|
---|
218 | FUNCTION getinetversion(VAR c:CSTRING):LONGINT;
|
---|
219 | APIENTRY; 'SO32DLL' index 31;
|
---|
220 | END;
|
---|
221 |
|
---|
222 | IMPLEMENTATION
|
---|
223 |
|
---|
224 | BEGIN
|
---|
225 | END.
|
---|