Skip to content

Commit 1d3c070

Browse files
Merge branch 'nodejs:main' into doc/permission-model-debugprocess-clarification
2 parents 6e6a805 + 4f08c64 commit 1d3c070

39 files changed

+1757
-152
lines changed

.github/workflows/linters.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ jobs:
149149
persist-credentials: false
150150
sparse-checkout: '*.nix'
151151
sparse-checkout-cone-mode: false
152-
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
152+
- uses: cachix/install-nix-action@96951a368ba55167b55f1c916f7d416bac6505fe # v31.10.3
153153
- name: Lint Nix files
154154
run: |
155155
nix-shell -I nixpkgs=./tools/nix/pkgs.nix -p 'nixfmt-tree' --run '

.github/workflows/test-shared.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ jobs:
165165
tar xzf tarballs/*.tar.gz -C "$RUNNER_TEMP"
166166
echo "TAR_DIR=$RUNNER_TEMP/$(basename tarballs/*.tar.gz .tar.gz)" >> "$GITHUB_ENV"
167167
168-
- uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
168+
- uses: cachix/install-nix-action@96951a368ba55167b55f1c916f7d416bac6505fe # v31.10.3
169169
with:
170170
extra_nix_config: sandbox = true
171171

.github/workflows/tools.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ jobs:
316316
allow-prereleases: true
317317
- name: Set up Nix
318318
if: matrix.id == 'nixpkgs-unstable' && (github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id)
319-
uses: cachix/install-nix-action@2126ae7fc54c9df00dd18f7f18754393182c73cd # v31.9.1
319+
uses: cachix/install-nix-action@96951a368ba55167b55f1c916f7d416bac6505fe # v31.10.3
320320
- run: ${{ matrix.run }}
321321
if: github.event_name == 'schedule' || inputs.id == 'all' || inputs.id == matrix.id
322322
env:

deps/uv/docs/src/tcp.rst

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,35 @@ API
9191
9292
.. versionchanged:: 1.49.0 If `delay` is less than 1 then ``UV_EINVAL``` is returned.
9393
94+
.. c:function:: int uv_tcp_keepalive_ex(uv_tcp_t* handle, int on, unsigned int idle, unsigned int intvl, unsigned int cnt)
95+
96+
Enable / disable TCP keep-alive with all socket options: `TCP_KEEPIDLE`, `TCP_KEEPINTVL` and `TCP_KEEPCNT`.
97+
`idle` is the value for `TCP_KEEPIDLE`, `intvl` is the value for `TCP_KEEPINTVL`,
98+
`cnt` is the value for `TCP_KEEPCNT`, ignored when `on` is zero.
99+
100+
With TCP keep-alive enabled, `idle` is the time (in seconds) the connection needs to remain idle before
101+
TCP starts sending keep-alive probes. `intvl` is the time (in seconds) between individual keep-alive probes.
102+
TCP will drop the connection after sending `cnt` probes without getting any replies from the peer, then the
103+
handle is destroyed with a ``UV_ETIMEDOUT`` error passed to the corresponding callback.
104+
105+
If one of `idle`, `intvl`, or `cnt` is less than 1, ``UV_EINVAL`` is returned.
106+
107+
.. versionchanged:: 1.52.0 added support of setting `TCP_KEEPINTVL` and `TCP_KEEPCNT` socket options.
108+
109+
.. note::
110+
Ensure that the socket options are supported by the underlying operating system.
111+
Currently supported platforms:
112+
- AIX
113+
- DragonFlyBSD
114+
- FreeBSD
115+
- HP-UX
116+
- illumos
117+
- Linux
118+
- macOS
119+
- NetBSD
120+
- Solaris
121+
- Windows
122+
94123
.. c:function:: int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable)
95124
96125
Enable / disable simultaneous asynchronous accept requests that are

deps/uv/include/uv.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,11 @@ UV_EXTERN int uv_tcp_nodelay(uv_tcp_t* handle, int enable);
602602
UV_EXTERN int uv_tcp_keepalive(uv_tcp_t* handle,
603603
int enable,
604604
unsigned int delay);
605+
UV_EXTERN int uv_tcp_keepalive_ex(uv_tcp_t* handle,
606+
int on,
607+
unsigned int idle,
608+
unsigned int intvl,
609+
unsigned int cnt);
605610
UV_EXTERN int uv_tcp_simultaneous_accepts(uv_tcp_t* handle, int enable);
606611

607612
enum uv_tcp_flags {

deps/uv/src/unix/internal.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,11 @@ int uv__slurp(const char* filename, char* buf, size_t len);
359359
/* tcp */
360360
int uv__tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb);
361361
int uv__tcp_nodelay(int fd, int on);
362-
int uv__tcp_keepalive(int fd, int on, unsigned int delay);
362+
int uv__tcp_keepalive(int fd,
363+
int on,
364+
unsigned int idle,
365+
unsigned int intvl,
366+
unsigned int cnt);
363367

364368
/* tty */
365369
void uv__tty_close(uv_tty_t* handle);

deps/uv/src/unix/stream.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ int uv__stream_open(uv_stream_t* stream, int fd, int flags) {
416416

417417
/* TODO Use delay the user passed in. */
418418
if ((stream->flags & UV_HANDLE_TCP_KEEPALIVE) &&
419-
uv__tcp_keepalive(fd, 1, 60)) {
419+
uv__tcp_keepalive(fd, 1, 60, 1, 10)) {
420420
return UV__ERR(errno);
421421
}
422422
}

deps/uv/src/unix/tcp.c

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -465,22 +465,18 @@ int uv__tcp_nodelay(int fd, int on) {
465465
#else
466466
#define UV_KEEPALIVE_FACTOR(x)
467467
#endif
468-
int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
469-
int idle;
470-
int intvl;
471-
int cnt;
472-
473-
(void) &idle;
474-
(void) &intvl;
475-
(void) &cnt;
476-
468+
int uv__tcp_keepalive(int fd,
469+
int on,
470+
unsigned int idle,
471+
unsigned int intvl,
472+
unsigned int cnt) {
477473
if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)))
478474
return UV__ERR(errno);
479475

480476
if (!on)
481477
return 0;
482478

483-
if (delay < 1)
479+
if (idle < 1 || intvl < 1 || cnt < 1)
484480
return UV_EINVAL;
485481

486482
#ifdef __sun
@@ -506,13 +502,16 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
506502
* The TCP connection will be aborted after certain amount of probes, which is set by TCP_KEEPCNT, without receiving response.
507503
*/
508504

509-
idle = delay;
510-
/* Kernel expects at least 10 seconds. */
505+
/* Kernel expects at least 10 seconds for TCP_KEEPIDLE and TCP_KEEPINTVL. */
511506
if (idle < 10)
512507
idle = 10;
513-
/* Kernel expects at most 10 days. */
508+
if (intvl < 10)
509+
intvl = 10;
510+
/* Kernel expects at most 10 days for TCP_KEEPIDLE and TCP_KEEPINTVL. */
514511
if (idle > 10*24*60*60)
515512
idle = 10*24*60*60;
513+
if (intvl > 10*24*60*60)
514+
intvl = 10*24*60*60;
516515

517516
UV_KEEPALIVE_FACTOR(idle);
518517

@@ -522,12 +521,10 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
522521
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle)))
523522
return UV__ERR(errno);
524523

525-
intvl = 10; /* required at least 10 seconds */
526524
UV_KEEPALIVE_FACTOR(intvl);
527525
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl)))
528526
return UV__ERR(errno);
529527

530-
cnt = 1; /* 1 retry, ensure (TCP_KEEPINTVL * TCP_KEEPCNT) is 10 seconds */
531528
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt)))
532529
return UV__ERR(errno);
533530
#else
@@ -539,15 +536,14 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
539536

540537
/* Note that the consequent probes will not be sent at equal intervals on Solaris,
541538
* but will be sent using the exponential backoff algorithm. */
542-
int time_to_abort = 10; /* 10 seconds */
539+
unsigned int time_to_abort = intvl * cnt;
543540
UV_KEEPALIVE_FACTOR(time_to_abort);
544541
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD, &time_to_abort, sizeof(time_to_abort)))
545542
return UV__ERR(errno);
546543
#endif
547544

548545
#else /* !defined(__sun) */
549546

550-
idle = delay;
551547
UV_KEEPALIVE_FACTOR(idle);
552548
#ifdef TCP_KEEPIDLE
553549
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle)))
@@ -559,14 +555,12 @@ int uv__tcp_keepalive(int fd, int on, unsigned int delay) {
559555
#endif
560556

561557
#ifdef TCP_KEEPINTVL
562-
intvl = 1; /* 1 second; same as default on Win32 */
563558
UV_KEEPALIVE_FACTOR(intvl);
564559
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl)))
565560
return UV__ERR(errno);
566561
#endif
567562

568563
#ifdef TCP_KEEPCNT
569-
cnt = 10; /* 10 retries; same as hardcoded on Win32 */
570564
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt)))
571565
return UV__ERR(errno);
572566
#endif
@@ -594,11 +588,20 @@ int uv_tcp_nodelay(uv_tcp_t* handle, int on) {
594588
}
595589

596590

597-
int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) {
591+
int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int idle) {
592+
return uv_tcp_keepalive_ex(handle, on, idle, 1, 10);
593+
}
594+
595+
596+
int uv_tcp_keepalive_ex(uv_tcp_t* handle,
597+
int on,
598+
unsigned int idle,
599+
unsigned int intvl,
600+
unsigned int cnt) {
598601
int err;
599602

600603
if (uv__stream_fd(handle) != -1) {
601-
err =uv__tcp_keepalive(uv__stream_fd(handle), on, delay);
604+
err = uv__tcp_keepalive(uv__stream_fd(handle), on, idle, intvl, cnt);
602605
if (err)
603606
return err;
604607
}
@@ -608,7 +611,7 @@ int uv_tcp_keepalive(uv_tcp_t* handle, int on, unsigned int delay) {
608611
else
609612
handle->flags &= ~UV_HANDLE_TCP_KEEPALIVE;
610613

611-
/* TODO Store delay if uv__stream_fd(handle) == -1 but don't want to enlarge
614+
/* TODO Store idle if uv__stream_fd(handle) == -1 but don't want to enlarge
612615
* uv_tcp_t with an int that's almost never used...
613616
*/
614617

0 commit comments

Comments
 (0)