Я использую сервер, написанный на Java (который может быть, а может и не быть сервером Minecraft) на моем компьютере с Linux, и я хочу запустить его по требованию, используя сокет systemd. Для этого мне нужно принять уже созданный объект сокета из systemd. Это достаточно просто - просто вызовите sd_listen_fds(0)
из кода C, чтобы подтвердить, что мы на самом деле получили сокет, затем просто обработайте дескриптор файла 3 как сокет и начните принимать подключения (или, возможно, установите Accept = Yes и пропустите сокеты через дверь для фактический серверный процесс) - но сложная часть передает этот сокет, как только мы вернем его в Java. Достаточно легко получить java.io.FileDescriptor (просто создать его без аргументов и установить свойство «fd» в int), но я попал в сокет. Вы можете создать Socket из SocketImpl, а объекты SocketImpl имеют свойство fd типа FileDescriptor, но я не знаю, как получить экземпляр SocketImpl, и я не знаю, безопасно ли устанавливать свойство fd после создания.