In 8.3 the default TCP keep alive settings introduced in https://github.com/elastic/elasticsearch/pull/59278 are not applied by default, therefore it uses the OS default values. See:

8.3.0:
```
cat connections-8.3.0.txt  | grep -e '930[01]' | head
ESTAB  0       0         [::ffff:127.0.0.1]:46818     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837419 sk:a2 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37928     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834869 sk:a3 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46808   timer:(keepalive,119min,0) uid:1038 ino:6830957 sk:a4 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37942     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834871 sk:a5 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46828   timer:(keepalive,119min,0) uid:1038 ino:6834882 sk:a6 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37926     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834868 sk:a7 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46826   timer:(keepalive,119min,0) uid:1038 ino:6834881 sk:a8 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46824     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837425 sk:a9 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37944     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834879 sk:aa <->
ESTAB  0       0         [::ffff:127.0.0.1]:46828     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837430 sk:ab <->
```

8.2.2:
```
cat connections-8.2.2.txt  | grep -e '930[01]' | head
ESTAB  0       0         [::ffff:127.0.0.1]:46752     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833637 sk:6e <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46746   timer:(keepalive,4min52sec,0) uid:1038 ino:6831684 sk:6f <->
ESTAB  0       0         [::ffff:127.0.0.1]:46732     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833629 sk:70 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37876     [::ffff:127.0.0.1]:9300    timer:(keepalive,4min52sec,0) uid:1038 ino:6833618 sk:71 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46730   timer:(keepalive,4min52sec,0) uid:1038 ino:6831676 sk:72 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46748     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833640 sk:73 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46736     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833631 sk:74 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46732   timer:(keepalive,4min52sec,0) uid:1038 ino:6831677 sk:75 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37860     [::ffff:127.0.0.1]:9300    timer:(keepalive,4min52sec,0) uid:1038 ino:6833611 sk:76 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46734     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833630 sk:77 <->
```

It's possible that after moving `NetUtil` to the netty module https://github.com/elastic/elasticsearch/pull/85953 some of the internal details used are not available anymore.
distribution/tools/server-cli/src/main/java/org/elasticsearch/server/cli/ServerProcess.java
final Path path;
        if (tmpDirOverride != null) {
            path = Paths.get(tmpDirOverride);
            if (Files.exists(path) == false) {
                throw new UserException(ExitCodes.CONFIG, "Temporary directory [" + path + "] does not exist or is not accessible");
            }
            if (Files.isDirectory(path) == false) {
                throw new UserException(ExitCodes.CONFIG, "Temporary directory [" + path + "] is not a directory");
            }
        } else {
            if (processInfo.sysprops().get("os.name").startsWith("Windows")) {
                /*
                 * On Windows, we avoid creating a unique temporary directory per invocation lest
                 * we pollute the temporary directory. On other operating systems, temporary directories
                 * will be cleaned automatically via various mechanisms (e.g., systemd, or restarts).
                 */
                path = Paths.get(processInfo.sysprops().get("java.io.tmpdir"), "elasticsearch");
                Files.createDirectories(path);
            } else {
                path = createTempDirectory("elasticsearch-");
            }
        }
        return path;
    }
    @SuppressForbidden(reason = "Files#createTempDirectory(String, FileAttribute...)")
    private static Path createTempDirectory(final String prefix, final FileAttribute<?>... attrs) throws IOException {
        return Files.createTempDirectory(prefix, attrs);
    }
}