apache / apache/kvrocks

`socket-fd` rejects `AF_UNIX` sockets

Open
#3,588 5 comments 1 reaction 1 assignee Claimed by @h7x4 View on GitHub
bug
Dominant language
C++
Stars
4.4k
Forks
658
Avg merge
1d 20h
Merged PRs (30d)
10

Description

### Search before asking

- [x] I had searched in the [issues](https://github.com/apache/kvrocks/issues) and found no similar issues.

### Version

OS is NixOS from a [nixpkgs](https://github.com/NixOS/nixpkgs) instance checked out at [`a9e7b5456522e9ee5857bb9812f27864d8e80f8a`](https://github.com/NixOS/nixpkgs/commit/a9e7b5456522e9ee5857bb9812f27864d8e80f8a)
Kvrocks: `2.16.0`

### Minimal reproduce step

Configure kvrocks with config:

```
daemonize no
dir /var/lib/kvrocks
socket-fd 3
supervised systemd
unixsocket /run/kvrocks/kvrocks.sock
```

And socket activate with systemd socket unit:

```ini
[Socket]
Accept=false
SocketGroup=kvrocks
SocketUser=kvrocks
ListenStream=/run/kvrocks/kvrocks.sock

[Install]
WantedBy=sockets.target
```

Systemd service:

```ini
[Unit]
After=network.target kvrocks.socket
Requires=kvrocks.socket

[Service]
Type=notify
User=kvrocks
Group=kvrocks
ExecStart=/usr/bin/kvrocks -c /etc/kvrocks/kvrocks.conf

[Install]
WantedBy=multi-user.target
```

### What did you expect to see?

I expected kvrocks to pick up the unix socket provided on fd 3 and use it to listen for connections.

### What did you see instead?

From journal:

```
systemd[1]: Starting Kvrocks - Distributed key value database...
kvrocks[1714]: [2026-08-11T15:45:19.154330+00:00][I][main.cc:171] kvrocks version 2.16.0
systemd[1]: Started Kvrocks - Distributed key value database.
kvrocks[1714]: [2026-08-11T15:45:19.214740+00:00][I][storage.cc:410] [storage] Success to load the data from disk: 49 ms
kvrocks[1714]: [2026-08-11T15:45:19.221324+00:00][E][worker.cc:66] [worker] Failed to listen to socket with fd: 3, Error: The port of the provided socket fd doesn't match the configured port
systemd[1]: kvrocks.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: kvrocks.service: Failed with result 'exit-code'.
```

### Anything Else?

Error triggered here:

https://github.com/apache/kvrocks/blob/3c1ac18172777cef83bbd6d287c1d28fd4231fba/src/server/worker.cc#L232-L236

Implementation of `util::GetLocalPort` for context:

https://github.com/apache/kvrocks/blob/3c1ac18172777cef83bbd6d287c1d28fd4231fba/src/common/io_util.cc#L350-L364

I'm not entirely sure if the `socket-fd` field is only intended for workers, but assuming it is not (or maybe even if it is), I don't think it should need to care about whether the port aligns with whatever is set in the config. Whatever provided the file descriptor can be in charge of the chosen port/socket path.

I'd be willing to submit a PR, but I'm not sure what direction you'd like to take this in, so I'll wait for input.

### Are you willing to submit a PR?

- [x] I'm willing to submit a PR!

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.