@bytecodealliance/preview2-shim 0.17.8 → 0.17.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -18
- package/lib/browser/cli.js +71 -71
- package/lib/browser/clocks.js +32 -32
- package/lib/browser/config.js +3 -3
- package/lib/browser/environment.js +15 -15
- package/lib/browser/filesystem.js +382 -396
- package/lib/browser/http.js +578 -576
- package/lib/browser/index.js +7 -7
- package/lib/browser/io.js +187 -181
- package/lib/browser/random.js +42 -44
- package/lib/browser/sockets.js +52 -52
- package/lib/common/instantiation.js +147 -151
- package/lib/io/calls.js +7 -9
- package/lib/io/worker-http.js +167 -178
- package/lib/io/worker-io.js +338 -406
- package/lib/io/worker-socket-tcp.js +259 -271
- package/lib/io/worker-socket-udp.js +437 -491
- package/lib/io/worker-sockets.js +230 -251
- package/lib/io/worker-thread.js +774 -822
- package/lib/nodejs/cli.js +53 -65
- package/lib/nodejs/clocks.js +49 -52
- package/lib/nodejs/filesystem.js +726 -785
- package/lib/nodejs/http.js +651 -697
- package/lib/nodejs/index.js +7 -7
- package/lib/nodejs/io.js +1 -1
- package/lib/nodejs/random.js +32 -32
- package/lib/nodejs/sockets.js +468 -538
- package/lib/synckit/index.js +85 -94
- package/package.json +11 -10
package/lib/io/worker-sockets.js
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { isIP } from
|
|
2
|
-
import { lookup } from
|
|
3
|
-
import { Socket } from
|
|
1
|
+
import { isIP } from "node:net";
|
|
2
|
+
import { lookup } from "node:dns/promises";
|
|
3
|
+
import { Socket } from "node:dgram";
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from
|
|
5
|
+
ALL,
|
|
6
|
+
BADFAMILY,
|
|
7
|
+
CANCELLED,
|
|
8
|
+
CONNREFUSED,
|
|
9
|
+
NODATA,
|
|
10
|
+
NOMEM,
|
|
11
|
+
NONAME,
|
|
12
|
+
NOTFOUND,
|
|
13
|
+
REFUSED,
|
|
14
|
+
SERVFAIL,
|
|
15
|
+
TIMEOUT,
|
|
16
|
+
V4MAPPED,
|
|
17
|
+
} from "node:dns";
|
|
18
18
|
import {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
} from
|
|
19
|
+
EACCES,
|
|
20
|
+
EADDRINUSE,
|
|
21
|
+
EADDRNOTAVAIL,
|
|
22
|
+
EALREADY,
|
|
23
|
+
EBADF,
|
|
24
|
+
ECONNABORTED,
|
|
25
|
+
ECONNREFUSED,
|
|
26
|
+
ECONNRESET,
|
|
27
|
+
EINVAL,
|
|
28
|
+
ENOBUFS,
|
|
29
|
+
ENOMEM,
|
|
30
|
+
ENOTCONN,
|
|
31
|
+
ENOTSUP,
|
|
32
|
+
EPERM,
|
|
33
|
+
EWOULDBLOCK,
|
|
34
|
+
} from "node:constants";
|
|
35
35
|
|
|
36
36
|
let stateCnt = 0;
|
|
37
37
|
export const SOCKET_STATE_INIT = ++stateCnt;
|
|
@@ -44,164 +44,158 @@ export const SOCKET_STATE_CONNECTION = ++stateCnt;
|
|
|
44
44
|
export const SOCKET_STATE_CLOSED = ++stateCnt;
|
|
45
45
|
|
|
46
46
|
const dnsLookupOptions = {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
verbatim: true,
|
|
48
|
+
all: true,
|
|
49
|
+
hints: V4MAPPED | ALL,
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
export function noLookup(ip, _opts, cb) {
|
|
53
|
-
|
|
53
|
+
cb(null, ip);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
export function socketResolveAddress(name) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
parsedUrl.search.length ||
|
|
80
|
-
parsedUrl.hash.length
|
|
81
|
-
) {
|
|
82
|
-
parsedUrl = null;
|
|
83
|
-
}
|
|
84
|
-
} catch {
|
|
85
|
-
// empty
|
|
86
|
-
}
|
|
87
|
-
if (!parsedUrl) {
|
|
88
|
-
throw 'invalid-argument';
|
|
57
|
+
const isIpNum = isIP(name[0] === "[" && name[name.length - 1] === "]" ? name.slice(1, -1) : name);
|
|
58
|
+
if (isIpNum > 0) {
|
|
59
|
+
return Promise.resolve([
|
|
60
|
+
{
|
|
61
|
+
tag: "ipv" + isIpNum,
|
|
62
|
+
val: (isIpNum === 4 ? ipv4ToTuple : ipv6ToTuple)(name),
|
|
63
|
+
},
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
// verify it is a valid domain name using the URL parser
|
|
67
|
+
let parsedUrl = null;
|
|
68
|
+
try {
|
|
69
|
+
parsedUrl = new URL(`https://${name}`);
|
|
70
|
+
if (
|
|
71
|
+
parsedUrl.port.length ||
|
|
72
|
+
parsedUrl.username.length ||
|
|
73
|
+
parsedUrl.password.length ||
|
|
74
|
+
parsedUrl.pathname !== "/" ||
|
|
75
|
+
parsedUrl.search.length ||
|
|
76
|
+
parsedUrl.hash.length
|
|
77
|
+
) {
|
|
78
|
+
parsedUrl = null;
|
|
89
79
|
}
|
|
80
|
+
} catch {
|
|
81
|
+
// empty
|
|
82
|
+
}
|
|
83
|
+
if (!parsedUrl) {
|
|
84
|
+
throw "invalid-argument";
|
|
85
|
+
}
|
|
90
86
|
|
|
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
|
-
);
|
|
87
|
+
return lookup(name, dnsLookupOptions).then(
|
|
88
|
+
(addresses) => {
|
|
89
|
+
return addresses.map(({ address, family }) => {
|
|
90
|
+
[
|
|
91
|
+
{
|
|
92
|
+
tag: "ipv" + family,
|
|
93
|
+
val: (family === 4 ? ipv4ToTuple : ipv6ToTuple)(address),
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
(err) => {
|
|
99
|
+
switch (err.code) {
|
|
100
|
+
// TODO: verify these more carefully
|
|
101
|
+
case NODATA:
|
|
102
|
+
case BADFAMILY:
|
|
103
|
+
case NONAME:
|
|
104
|
+
case NOTFOUND:
|
|
105
|
+
throw "name-unresolvable";
|
|
106
|
+
case TIMEOUT:
|
|
107
|
+
case REFUSED:
|
|
108
|
+
case CONNREFUSED:
|
|
109
|
+
case SERVFAIL:
|
|
110
|
+
case NOMEM:
|
|
111
|
+
case CANCELLED:
|
|
112
|
+
throw "temporary-resolver-failure";
|
|
113
|
+
default:
|
|
114
|
+
throw "permanent-resolver-failure";
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
);
|
|
124
118
|
}
|
|
125
119
|
|
|
126
120
|
export function convertSocketError(err) {
|
|
127
|
-
|
|
128
|
-
case
|
|
129
|
-
case
|
|
130
|
-
case
|
|
131
|
-
|
|
132
|
-
case
|
|
133
|
-
case
|
|
134
|
-
|
|
135
|
-
case
|
|
136
|
-
|
|
137
|
-
case
|
|
138
|
-
|
|
139
|
-
case
|
|
140
|
-
case
|
|
141
|
-
|
|
142
|
-
case
|
|
143
|
-
|
|
144
|
-
case
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
case
|
|
148
|
-
|
|
149
|
-
case
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
case
|
|
153
|
-
|
|
154
|
-
case
|
|
155
|
-
|
|
156
|
-
case
|
|
157
|
-
|
|
121
|
+
switch (err?.code) {
|
|
122
|
+
case "EBADF":
|
|
123
|
+
case "ENOTCONN":
|
|
124
|
+
case "ERR_SOCKET_DGRAM_NOT_CONNECTED":
|
|
125
|
+
return "invalid-state";
|
|
126
|
+
case "EACCES":
|
|
127
|
+
case "EPERM":
|
|
128
|
+
return "access-denied";
|
|
129
|
+
case "ENOTSUP":
|
|
130
|
+
return "not-supported";
|
|
131
|
+
case "EINVAL":
|
|
132
|
+
return "invalid-argument";
|
|
133
|
+
case "ENOMEM":
|
|
134
|
+
case "ENOBUFS":
|
|
135
|
+
return "out-of-memory";
|
|
136
|
+
case "EALREADY":
|
|
137
|
+
return "concurrency-conflict";
|
|
138
|
+
case "EWOULDBLOCK":
|
|
139
|
+
return "would-block";
|
|
140
|
+
// TODO: return "new-socket-limit";
|
|
141
|
+
case "EADDRNOTAVAIL":
|
|
142
|
+
return "address-not-bindable";
|
|
143
|
+
case "EADDRINUSE":
|
|
144
|
+
return "address-in-use";
|
|
145
|
+
// TODO: return "remote-unreachable";
|
|
146
|
+
case "ECONNREFUSED":
|
|
147
|
+
return "connection-refused";
|
|
148
|
+
case "ECONNRESET":
|
|
149
|
+
return "connection-reset";
|
|
150
|
+
case "ECONNABORTED":
|
|
151
|
+
return "connection-aborted";
|
|
158
152
|
default:
|
|
159
|
-
|
|
160
|
-
|
|
153
|
+
return "unknown";
|
|
154
|
+
}
|
|
161
155
|
}
|
|
162
156
|
|
|
163
157
|
export function convertSocketErrorCode(code) {
|
|
164
|
-
|
|
158
|
+
switch (code) {
|
|
165
159
|
case 4053: // windows
|
|
166
160
|
case 4083:
|
|
167
161
|
case ENOTCONN:
|
|
168
162
|
case EBADF:
|
|
169
|
-
|
|
163
|
+
return "invalid-state";
|
|
170
164
|
case EACCES:
|
|
171
165
|
case EPERM:
|
|
172
|
-
|
|
166
|
+
return "access-denied";
|
|
173
167
|
case ENOTSUP:
|
|
174
|
-
|
|
168
|
+
return "not-supported";
|
|
175
169
|
case EINVAL:
|
|
176
|
-
|
|
170
|
+
return "invalid-argument";
|
|
177
171
|
case ENOMEM:
|
|
178
172
|
case ENOBUFS:
|
|
179
|
-
|
|
173
|
+
return "out-of-memory";
|
|
180
174
|
case EALREADY:
|
|
181
|
-
|
|
175
|
+
return "concurrency-conflict";
|
|
182
176
|
case EWOULDBLOCK:
|
|
183
|
-
|
|
184
|
-
|
|
177
|
+
return "would-block";
|
|
178
|
+
// TODO: return "new-socket-limit";
|
|
185
179
|
case 4090: // windows
|
|
186
180
|
case EADDRNOTAVAIL:
|
|
187
|
-
|
|
181
|
+
return "address-not-bindable";
|
|
188
182
|
case 4091: // windows
|
|
189
183
|
case EADDRINUSE:
|
|
190
|
-
|
|
191
|
-
|
|
184
|
+
return "address-in-use";
|
|
185
|
+
// TODO: return "remote-unreachable";
|
|
192
186
|
case ECONNREFUSED:
|
|
193
|
-
|
|
187
|
+
return "connection-refused";
|
|
194
188
|
case ECONNRESET:
|
|
195
|
-
|
|
189
|
+
return "connection-reset";
|
|
196
190
|
case ECONNABORTED:
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
191
|
+
return "connection-aborted";
|
|
192
|
+
// TODO: return "datagram-too-large";
|
|
193
|
+
// TODO: return "name-unresolvable";
|
|
194
|
+
// TODO: return "temporary-resolver-failure";
|
|
201
195
|
default:
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
196
|
+
// process._rawDebug('unknown error code', code);
|
|
197
|
+
return "unknown";
|
|
198
|
+
}
|
|
205
199
|
}
|
|
206
200
|
|
|
207
201
|
/**
|
|
@@ -212,17 +206,17 @@ export function convertSocketErrorCode(code) {
|
|
|
212
206
|
*/
|
|
213
207
|
|
|
214
208
|
export function tupleToIPv6(arr) {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
209
|
+
if (arr.length !== 8) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
return arr.map((segment) => segment.toString(16)).join(":");
|
|
219
213
|
}
|
|
220
214
|
|
|
221
215
|
export function tupleToIpv4(arr) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
216
|
+
if (arr.length !== 4) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
return arr.map((segment) => segment.toString(10)).join(".");
|
|
226
220
|
}
|
|
227
221
|
|
|
228
222
|
/**
|
|
@@ -230,12 +224,10 @@ export function tupleToIpv4(arr) {
|
|
|
230
224
|
* @returns {boolean}
|
|
231
225
|
*/
|
|
232
226
|
export function isMulticastIpAddress(ipSocketAddress) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
ipSocketAddress.val.address[0] === 0xff00)
|
|
238
|
-
);
|
|
227
|
+
return (
|
|
228
|
+
(ipSocketAddress.tag === "ipv4" && ipSocketAddress.val.address[0] === 0xe0) ||
|
|
229
|
+
(ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[0] === 0xff00)
|
|
230
|
+
);
|
|
239
231
|
}
|
|
240
232
|
|
|
241
233
|
/**
|
|
@@ -243,10 +235,7 @@ export function isMulticastIpAddress(ipSocketAddress) {
|
|
|
243
235
|
* @returns {boolean}
|
|
244
236
|
*/
|
|
245
237
|
export function isIPv4MappedAddress(ipSocketAddress) {
|
|
246
|
-
|
|
247
|
-
ipSocketAddress.tag === 'ipv6' &&
|
|
248
|
-
ipSocketAddress.val.address[5] === 0xffff
|
|
249
|
-
);
|
|
238
|
+
return ipSocketAddress.tag === "ipv6" && ipSocketAddress.val.address[5] === 0xffff;
|
|
250
239
|
}
|
|
251
240
|
|
|
252
241
|
/**
|
|
@@ -254,10 +243,7 @@ export function isIPv4MappedAddress(ipSocketAddress) {
|
|
|
254
243
|
* @returns {boolean}
|
|
255
244
|
*/
|
|
256
245
|
export function isUnicastIpAddress(ipSocketAddress) {
|
|
257
|
-
|
|
258
|
-
!isMulticastIpAddress(ipSocketAddress) &&
|
|
259
|
-
!isBroadcastIpAddress(ipSocketAddress)
|
|
260
|
-
);
|
|
246
|
+
return !isMulticastIpAddress(ipSocketAddress) && !isBroadcastIpAddress(ipSocketAddress);
|
|
261
247
|
}
|
|
262
248
|
|
|
263
249
|
/**
|
|
@@ -265,26 +251,21 @@ export function isUnicastIpAddress(ipSocketAddress) {
|
|
|
265
251
|
* @returns {boolean}
|
|
266
252
|
*/
|
|
267
253
|
export function isWildcardAddress(ipSocketAddress) {
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
address[5] === 0 &&
|
|
284
|
-
address[6] === 0 &&
|
|
285
|
-
address[7] === 0
|
|
286
|
-
);
|
|
287
|
-
}
|
|
254
|
+
const { address } = ipSocketAddress.val;
|
|
255
|
+
if (ipSocketAddress.tag === "ipv4") {
|
|
256
|
+
return address[0] === 0 && address[1] === 0 && address[2] === 0 && address[3] === 0;
|
|
257
|
+
} else {
|
|
258
|
+
return (
|
|
259
|
+
address[0] === 0 &&
|
|
260
|
+
address[1] === 0 &&
|
|
261
|
+
address[2] === 0 &&
|
|
262
|
+
address[3] === 0 &&
|
|
263
|
+
address[4] === 0 &&
|
|
264
|
+
address[5] === 0 &&
|
|
265
|
+
address[6] === 0 &&
|
|
266
|
+
address[7] === 0
|
|
267
|
+
);
|
|
268
|
+
}
|
|
288
269
|
}
|
|
289
270
|
|
|
290
271
|
/**
|
|
@@ -292,14 +273,14 @@ export function isWildcardAddress(ipSocketAddress) {
|
|
|
292
273
|
* @returns {boolean}
|
|
293
274
|
*/
|
|
294
275
|
export function isBroadcastIpAddress(ipSocketAddress) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
276
|
+
const { address } = ipSocketAddress.val;
|
|
277
|
+
return (
|
|
278
|
+
ipSocketAddress.tag === "ipv4" &&
|
|
279
|
+
address[0] === 0xff &&
|
|
280
|
+
address[1] === 0xff &&
|
|
281
|
+
address[2] === 0xff &&
|
|
282
|
+
address[3] === 0xff
|
|
283
|
+
);
|
|
303
284
|
}
|
|
304
285
|
|
|
305
286
|
/**
|
|
@@ -309,25 +290,23 @@ export function isBroadcastIpAddress(ipSocketAddress) {
|
|
|
309
290
|
* @returns {string}
|
|
310
291
|
*/
|
|
311
292
|
export function serializeIpAddress(addr) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
293
|
+
if (addr.tag === "ipv4") {
|
|
294
|
+
return tupleToIpv4(addr.val.address);
|
|
295
|
+
}
|
|
296
|
+
return tupleToIPv6(addr.val.address);
|
|
316
297
|
}
|
|
317
298
|
|
|
318
299
|
export function ipv6ToTuple(ipv6) {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
...rhsParts,
|
|
326
|
-
].map((segment) => parseInt(segment, 16));
|
|
300
|
+
const [lhs, rhs = ""] = ipv6.includes("::") ? ipv6.split("::") : [ipv6];
|
|
301
|
+
const lhsParts = lhs === "" ? [] : lhs.split(":");
|
|
302
|
+
const rhsParts = rhs === "" ? [] : rhs.split(":");
|
|
303
|
+
return [...lhsParts, ...Array(8 - lhsParts.length - rhsParts.length).fill(0), ...rhsParts].map(
|
|
304
|
+
(segment) => parseInt(segment, 16),
|
|
305
|
+
);
|
|
327
306
|
}
|
|
328
307
|
|
|
329
308
|
export function ipv4ToTuple(ipv4) {
|
|
330
|
-
|
|
309
|
+
return ipv4.split(".").map((segment) => parseInt(segment, 10));
|
|
331
310
|
}
|
|
332
311
|
|
|
333
312
|
/**
|
|
@@ -337,49 +316,49 @@ export function ipv4ToTuple(ipv4) {
|
|
|
337
316
|
* @returns {IpSocketAddress}
|
|
338
317
|
*/
|
|
339
318
|
export function ipSocketAddress(family, addr, port) {
|
|
340
|
-
|
|
341
|
-
return {
|
|
342
|
-
tag: 'ipv4',
|
|
343
|
-
val: {
|
|
344
|
-
port,
|
|
345
|
-
address: ipv4ToTuple(addr),
|
|
346
|
-
},
|
|
347
|
-
};
|
|
348
|
-
}
|
|
319
|
+
if (family === "ipv4") {
|
|
349
320
|
return {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
scopeId: 0,
|
|
356
|
-
},
|
|
321
|
+
tag: "ipv4",
|
|
322
|
+
val: {
|
|
323
|
+
port,
|
|
324
|
+
address: ipv4ToTuple(addr),
|
|
325
|
+
},
|
|
357
326
|
};
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
tag: "ipv6",
|
|
330
|
+
val: {
|
|
331
|
+
port,
|
|
332
|
+
flowInfo: 0,
|
|
333
|
+
address: ipv6ToTuple(addr),
|
|
334
|
+
scopeId: 0,
|
|
335
|
+
},
|
|
336
|
+
};
|
|
358
337
|
}
|
|
359
338
|
|
|
360
339
|
let _recvBufferSize, _sendBufferSize;
|
|
361
340
|
async function getDefaultBufferSizes() {
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
341
|
+
var s = new Socket({ type: "udp4" });
|
|
342
|
+
s.bind(0);
|
|
343
|
+
await new Promise((resolve, reject) => {
|
|
344
|
+
s.once("error", reject);
|
|
345
|
+
s.once("listening", resolve);
|
|
346
|
+
});
|
|
347
|
+
_recvBufferSize = BigInt(s.getRecvBufferSize());
|
|
348
|
+
_sendBufferSize = BigInt(s.getSendBufferSize());
|
|
349
|
+
s.close();
|
|
371
350
|
}
|
|
372
351
|
|
|
373
352
|
export async function getDefaultSendBufferSize() {
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
353
|
+
if (!_sendBufferSize) {
|
|
354
|
+
await getDefaultBufferSizes();
|
|
355
|
+
}
|
|
356
|
+
return _sendBufferSize;
|
|
378
357
|
}
|
|
379
358
|
|
|
380
359
|
export async function getDefaultReceiveBufferSize() {
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
360
|
+
if (!_recvBufferSize) {
|
|
361
|
+
await getDefaultBufferSizes();
|
|
362
|
+
}
|
|
363
|
+
return _recvBufferSize;
|
|
385
364
|
}
|