Skip to content

port/builtin: retry accept after fd exhaustion - #657

Open
sairex53 wants to merge 1 commit into
rootless-containers:masterfrom
sairex53:fix-536-accept-retry
Open

sairex53 wants to merge 1 commit into
rootless-containers:masterfrom
sairex53:fix-536-accept-retry

Conversation

@sairex53

Copy link
Copy Markdown

When the parent TCP listener hits EMFILE or ENFILE, the current accept loop closes newConns, causing the port-forwarding worker to exit. The listener then stops forwarding connections permanently even after descriptors become available.

Retry these descriptor-exhaustion errors with capped exponential backoff, reset the delay after a successful accept, and make the wait interruptible during shutdown. Other accept errors retain the existing behavior.

Add tests for recovery after EMFILE and ENFILE, prompt shutdown during the retry delay, and termination on a non-retryable accept error.

Fixes #536.

Testing:

  • go test ./pkg/port/builtin/parent/tcp -count=1
  • go test -race ./pkg/port/builtin/parent/tcp -count=1
  • go vet ./pkg/port/builtin/parent/tcp
  • go build ./cmd/rootlesskit
  • git diff --check

Signed-off-by: Eduard Zateev <hackerowskiy@gmail.com>
@sairex53
sairex53 force-pushed the fix-536-accept-retry branch from 272da50 to b1cb280 Compare October 22, 2026 11:25
@AkihiroSuda

Copy link
Copy Markdown
Member

Testing

Did you test it with an actual instance of Docker, nerdctl, or something else?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[v1.0.1] Port forwarding fails under high concurrency load. (accept4: too many open files)

2 participants