File: socket.ha

package info (click to toggle)
hare 0.26.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 7,352 kB
  • sloc: asm: 1,374; makefile: 123; sh: 117; lisp: 101
file content (355 lines) | stat: -rw-r--r-- 11,776 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
// SPDX-License-Identifier: MPL-2.0
// (c) Hare authors <https://harelang.org>

export type sa_family_t = u8;
export type socklen_t = u32;

export type in_addr = struct {
	s_addr: u32
};

export type sockaddr_in = struct {
	sin_len: u8,
	sin_family: sa_family_t,
	sin_port: u16,
	sin_addr: in_addr,
	_: [8]u8, // padding
};

export type in6_addr = struct {
	union {
		s6_addr: [16]u8,
		s6_addr16: [8]u16,
		s6_addr32: [4]u32,
	}
};

export type sockaddr_in6 = struct {
	sin6_len: u8,
	sin6_family: sa_family_t,
	sin6_port: u16,
	sin6_flowinfo: u32,
	sin6_addr: in6_addr,
	sin6_scope_id: u32,
};

export def UNIX_PATH_MAX: size = 104;

export type sockaddr_un = struct {
	sun_len: u8,
	sun_family: sa_family_t,
	sun_path: [UNIX_PATH_MAX]u8,
};

export type sockaddr = struct {
	union {
		in: sockaddr_in,
		in6: sockaddr_in6,
		un: sockaddr_un,
	},
};

export def SCM_RIGHTS: int = 0x01;
export def SCM_CREDENTIALS: int = 0x02;

export type msghdr = struct {
	msg_name: nullable *opaque,
	msg_namelen: socklen_t,

	msg_iov: nullable *[*]iovec,
	msg_iovlen: int,

	msg_control: nullable *opaque,
	msg_controllen: socklen_t,

	msg_flags: int
};

export type cmsghdr = struct {
	cmsg_len: socklen_t,
	cmsg_level: int,
	cmsg_type: int,
};

export type cmsg = struct {
	hdr: cmsghdr,
	cmsg_data: [*]u8,
};

export def AF_UNSPEC: sa_family_t = 0;
export def AF_UNIX: sa_family_t = 1;
export def AF_LOCAL: sa_family_t = AF_UNIX;
export def AF_INET: sa_family_t = 2;
export def AF_IMPLINK: sa_family_t = 3;
export def AF_PUP: sa_family_t = 4;
export def AF_CHAOS: sa_family_t = 5;
export def AF_NETBIOS: sa_family_t = 6;
export def AF_ISO: sa_family_t = 7;
export def AF_OSI: sa_family_t = AF_ISO;
export def AF_ECMA: sa_family_t = 8;
export def AF_DATAKIT: sa_family_t = 9;
export def AF_CCITT: sa_family_t = 10;
export def AF_SNA: sa_family_t = 11;
export def AF_DECnet: sa_family_t = 12;
export def AF_DLI: sa_family_t = 13;
export def AF_LAT: sa_family_t = 14;
export def AF_HYLINK: sa_family_t = 15;
export def AF_APPLETALK: sa_family_t = 16;
export def AF_ROUTE: sa_family_t = 17;
export def AF_LINK: sa_family_t = 18;
export def pseudo_AF_XTP: sa_family_t = 19;
export def AF_COIP: sa_family_t = 20;
export def AF_CNT: sa_family_t = 21;
export def pseudo_AF_RTIP: sa_family_t = 22;
export def AF_IPX: sa_family_t = 23;
export def AF_SIP: sa_family_t = 24;
export def pseudo_AF_PIP: sa_family_t = 25;
export def AF_ISDN: sa_family_t = 26;
export def AF_E164: sa_family_t = AF_ISDN;
export def AF_INET6: sa_family_t = 28;
export def AF_NATM: sa_family_t = 29;
export def AF_ATM: sa_family_t = 30;
export def AF_NETGRAPH: sa_family_t = 32;
export def AF_SLOW: sa_family_t = 33;
export def AF_SCLUSTER: sa_family_t = 34;
export def AF_ARP: sa_family_t = 35;
export def AF_BLUETOOTH: sa_family_t = 36;
export def AF_IEEE80211: sa_family_t = 37;
export def AF_INET_SDP: sa_family_t = 40;
export def AF_INET6_SDP: sa_family_t = 42;
export def AF_HYPERV: sa_family_t = 43;
export def AF_MAX: sa_family_t = 43;
export def AF_VENDOR00: sa_family_t = 39;
export def AF_VENDOR01: sa_family_t = 41;
export def AF_VENDOR03: sa_family_t = 45;
export def AF_VENDOR04: sa_family_t = 47;
export def AF_VENDOR05: sa_family_t = 49;
export def AF_VENDOR06: sa_family_t = 51;
export def AF_VENDOR07: sa_family_t = 53;
export def AF_VENDOR08: sa_family_t = 55;
export def AF_VENDOR09: sa_family_t = 57;
export def AF_VENDOR10: sa_family_t = 59;
export def AF_VENDOR11: sa_family_t = 61;
export def AF_VENDOR12: sa_family_t = 63;
export def AF_VENDOR13: sa_family_t = 65;
export def AF_VENDOR14: sa_family_t = 67;
export def AF_VENDOR15: sa_family_t = 69;
export def AF_VENDOR16: sa_family_t = 71;
export def AF_VENDOR17: sa_family_t = 73;
export def AF_VENDOR18: sa_family_t = 75;
export def AF_VENDOR19: sa_family_t = 77;
export def AF_VENDOR20: sa_family_t = 79;
export def AF_VENDOR21: sa_family_t = 81;
export def AF_VENDOR22: sa_family_t = 83;
export def AF_VENDOR23: sa_family_t = 85;
export def AF_VENDOR24: sa_family_t = 87;
export def AF_VENDOR25: sa_family_t = 89;
export def AF_VENDOR26: sa_family_t = 91;
export def AF_VENDOR27: sa_family_t = 93;
export def AF_VENDOR28: sa_family_t = 95;
export def AF_VENDOR29: sa_family_t = 97;
export def AF_VENDOR30: sa_family_t = 99;
export def AF_VENDOR31: sa_family_t = 101;
export def AF_VENDOR32: sa_family_t = 103;
export def AF_VENDOR33: sa_family_t = 105;
export def AF_VENDOR34: sa_family_t = 107;
export def AF_VENDOR35: sa_family_t = 109;
export def AF_VENDOR36: sa_family_t = 111;
export def AF_VENDOR37: sa_family_t = 113;
export def AF_VENDOR38: sa_family_t = 115;
export def AF_VENDOR39: sa_family_t = 117;
export def AF_VENDOR40: sa_family_t = 119;
export def AF_VENDOR41: sa_family_t = 121;
export def AF_VENDOR42: sa_family_t = 123;
export def AF_VENDOR43: sa_family_t = 125;
export def AF_VENDOR44: sa_family_t = 127;
export def AF_VENDOR45: sa_family_t = 129;
export def AF_VENDOR46: sa_family_t = 131;
export def AF_VENDOR47: sa_family_t = 133;

export def SOCK_STREAM: int = 1;
export def SOCK_DGRAM: int = 2;
export def SOCK_RAW: int = 3;
export def SOCK_RDM: int = 4;
export def SOCK_SEQPACKET: int = 5;
export def SOCK_CLOEXEC: int = 0x10000000;
export def SOCK_NONBLOCK: int = 0x20000000;

export def IPPROTO_IP: int = 0;
export def IPPROTO_ICMP: int = 1;
export def IPPROTO_TCP: int = 6;
export def IPPROTO_UDP: int = 17;
export def IPPROTO_IPV6: int = 41;
export def IPPROTO_RAW: int = 255;
export def IPPROTO_HOPOPTS: int = 0;
export def IPPROTO_IGMP: int = 2;
export def IPPROTO_GGP: int = 3;
export def IPPROTO_IPV4: int = 4;
export def IPPROTO_IPIP: int = IPPROTO_IPV4;
export def IPPROTO_ST: int = 7;
export def IPPROTO_EGP: int = 8;
export def IPPROTO_PIGP: int = 9;
export def IPPROTO_RCCMON: int = 10;
export def IPPROTO_NVPII: int = 11;
export def IPPROTO_PUP: int = 12;
export def IPPROTO_ARGUS: int = 13;
export def IPPROTO_EMCON: int = 14;
export def IPPROTO_XNET: int = 15;
export def IPPROTO_CHAOS: int = 16;
export def IPPROTO_MUX: int = 18;
export def IPPROTO_MEAS: int = 19;
export def IPPROTO_HMP: int = 20;
export def IPPROTO_PRM: int = 21;
export def IPPROTO_IDP: int = 22;
export def IPPROTO_TRUNK1: int = 23;
export def IPPROTO_TRUNK2: int = 24;
export def IPPROTO_LEAF1: int = 25;
export def IPPROTO_LEAF2: int = 26;
export def IPPROTO_RDP: int = 27;
export def IPPROTO_IRTP: int = 28;
export def IPPROTO_TP: int = 29;
export def IPPROTO_BLT: int = 30;
export def IPPROTO_NSP: int = 31;
export def IPPROTO_INP: int = 32;
export def IPPROTO_DCCP: int = 33;
export def IPPROTO_3PC: int = 34;
export def IPPROTO_IDPR: int = 35;
export def IPPROTO_XTP: int = 36;
export def IPPROTO_DDP: int = 37;
export def IPPROTO_CMTP: int = 38;
export def IPPROTO_TPXX: int = 39;
export def IPPROTO_IL: int = 40;
export def IPPROTO_SDRP: int = 42;
export def IPPROTO_ROUTING: int = 43;
export def IPPROTO_FRAGMENT: int = 44;
export def IPPROTO_IDRP: int = 45;
export def IPPROTO_RSVP: int = 46;
export def IPPROTO_GRE: int = 47;
export def IPPROTO_MHRP: int = 48;
export def IPPROTO_BHA: int = 49;
export def IPPROTO_ESP: int = 50;
export def IPPROTO_AH: int = 51;
export def IPPROTO_INLSP: int = 52;
export def IPPROTO_SWIPE: int = 53;
export def IPPROTO_NHRP: int = 54;
export def IPPROTO_MOBILE: int = 55;
export def IPPROTO_TLSP: int = 56;
export def IPPROTO_SKIP: int = 57;
export def IPPROTO_ICMPV6: int = 58;
export def IPPROTO_NONE: int = 59;
export def IPPROTO_DSTOPTS: int = 60;
export def IPPROTO_AHIP: int = 61;
export def IPPROTO_CFTP: int = 62;
export def IPPROTO_HELLO: int = 63;
export def IPPROTO_SATEXPAK: int = 64;
export def IPPROTO_KRYPTOLAN: int = 65;
export def IPPROTO_RVD: int = 66;
export def IPPROTO_IPPC: int = 67;
export def IPPROTO_ADFS: int = 68;
export def IPPROTO_SATMON: int = 69;
export def IPPROTO_VISA: int = 70;
export def IPPROTO_IPCV: int = 71;
export def IPPROTO_CPNX: int = 72;
export def IPPROTO_CPHB: int = 73;
export def IPPROTO_WSN: int = 74;
export def IPPROTO_PVP: int = 75;
export def IPPROTO_BRSATMON: int = 76;
export def IPPROTO_ND: int = 77;
export def IPPROTO_WBMON: int = 78;
export def IPPROTO_WBEXPAK: int = 79;
export def IPPROTO_EON: int = 80;
export def IPPROTO_VMTP: int = 81;
export def IPPROTO_SVMTP: int = 82;
export def IPPROTO_VINES: int = 83;
export def IPPROTO_TTP: int = 84;
export def IPPROTO_IGP: int = 85;
export def IPPROTO_DGP: int = 86;
export def IPPROTO_TCF: int = 87;
export def IPPROTO_IGRP: int = 88;
export def IPPROTO_OSPFIGP: int = 89;
export def IPPROTO_SRPC: int = 90;
export def IPPROTO_LARP: int = 91;
export def IPPROTO_MTP: int = 92;
export def IPPROTO_AX25: int = 93;
export def IPPROTO_IPEIP: int = 94;
export def IPPROTO_MICP: int = 95;
export def IPPROTO_SCCSP: int = 96;
export def IPPROTO_ETHERIP: int = 97;
export def IPPROTO_ENCAP: int = 98;
export def IPPROTO_APES: int = 99;
export def IPPROTO_GMTP: int = 100;
export def IPPROTO_IPCOMP: int = 108;
export def IPPROTO_SCTP: int = 132;
export def IPPROTO_MH: int = 135;
export def IPPROTO_UDPLITE: int = 136;
export def IPPROTO_HIP: int = 139;
export def IPPROTO_SHIM6: int = 140;
export def IPPROTO_PIM: int = 103;
export def IPPROTO_CARP: int = 112;
export def IPPROTO_PGM: int = 113;
export def IPPROTO_MPLS: int = 137;
export def IPPROTO_PFSYNC: int = 240;
export def IPPROTO_RESERVED_253: int = 253;
export def IPPROTO_RESERVED_254: int = 254;

export def MSG_OOB: int = 0x00000001;
export def MSG_PEEK: int = 0x00000002;
export def MSG_DONTROUTE: int = 0x00000004;
export def MSG_EOR: int = 0x00000008;
export def MSG_TRUNC: int = 0x00000010;
export def MSG_CTRUNC: int = 0x00000020;
export def MSG_WAITALL: int = 0x00000040;
export def MSG_DONTWAIT: int = 0x00000080;
export def MSG_EOF: int = 0x00000100;
export def MSG_NOTIFICATION: int = 0x00002000;
export def MSG_NBIO: int = 0x00004000;
export def MSG_COMPAT: int = 0x00008000;
export def MSG_NOSIGNAL: int = 0x00020000;
export def MSG_CMSG_CLOEXEC: int = 0x00040000;
export def MSG_WAITFORONE: int = 0x00080000;

export def SO_DEBUG: int = 0x00000001;
export def SO_ACCEPTCONN: int = 0x00000002;
export def SO_REUSEADDR: int = 0x00000004;
export def SO_KEEPALIVE: int = 0x00000008;
export def SO_DONTROUTE: int = 0x00000010;
export def SO_BROADCAST: int = 0x00000020;
export def SO_USELOOPBACK: int = 0x00000040;
export def SO_LINGER: int = 0x00000080;
export def SO_OOBINLINE: int = 0x00000100;
export def SO_REUSEPORT: int = 0x00000200;
export def SO_TIMESTAMP: int = 0x00000400;
export def SO_NOSIGPIPE: int = 0x00000800;
export def SO_ACCEPTFILTER: int = 0x00001000;
export def SO_BINTIME: int = 0x00002000;
export def SO_NO_OFFLOAD: int = 0x00004000;
export def SO_NO_DDP: int = 0x00008000;
export def SO_REUSEPORT_LB: int = 0x00010000;
export def SO_SNDBUF: int = 0x1001;
export def SO_RCVBUF: int = 0x1002;
export def SO_SNDLOWAT: int = 0x1003;
export def SO_RCVLOWAT: int = 0x1004;
export def SO_SNDTIMEO: int = 0x1005;
export def SO_RCVTIMEO: int = 0x1006;
export def SO_ERROR: int = 0x1007;
export def SO_TYPE: int = 0x1008;
export def SO_LABEL: int = 0x1009;
export def SO_PEERLABEL: int = 0x1010;
export def SO_LISTENQLIMIT: int = 0x1011;
export def SO_LISTENQLEN: int = 0x1012;
export def SO_LISTENINCQLEN: int = 0x1013;
export def SO_SETFIB: int = 0x1014;
export def SO_USER_COOKIE: int = 0x1015;
export def SO_PROTOCOL: int = 0x1016;
export def SO_PROTOTYPE: int = SO_PROTOCOL;
export def SO_TS_CLOCK: int = 0x1017;
export def SO_MAX_PACING_RATE: int = 0x1018;
export def SO_DOMAIN: int = 0x1019;
export def SO_TS_REALTIME_MICRO: int = 0;
export def SO_TS_BINTIME: int = 1;
export def SO_TS_REALTIME: int = 2;
export def SO_TS_MONOTONIC: int = 3;
export def SO_TS_DEFAULT: int = SO_TS_REALTIME_MICRO;
export def SO_TS_CLOCK_MAX: int = SO_TS_MONOTONIC;

export def SOL_SOCKET: int = 0xffff;