Unix domain sockets (UDS, AF_UNIX) in System.inheritedChannel() and elsewhere in Java

František Kučera franta-java at frantovo.cz
Fri Jul 19 15:35:49 UTC 2019


I am interested in the unix domain sockets (UDS, AF_UNIX) support in Java.

Java is able to inherit a channel from the parent process and access it 
through System.inheritedChannel(). The channel is passed as an open file 
descriptor (FD) to Java form the parent process which is usually some 
superserver (like xinetd or systemd) or some other loader*. The channel 
might be both a ServerSocketChannel (accept() is called in Java) and a 
SocketChannel (accept() is called once in the parent process) or a 
DatagramChannel. And it might be TCP, UDP or UDS. But the UDS support is 
a bit incomplete.

I want to make the UDS support better so I wrote a proof-of-concept 
patch – see attached .diff and webrev: 
http://frantovo.cz/disk/openjdk-uds-08/ It still requires a lot of work 
(clean-up, refactoring, portability, security manager, documentation, 
testing…) but it seems feasible to me.

What already works in Java:

  * listening on an inherited UDS channel (ServerSocketChannel) – e.g.
    Jetty or Tomcat are able to listen and serve HTTP requests on UDS
    instead of TCP
  * receiving datagrams from UDS

What my proof-of-concept patch adds:

  * class UnixSocketAddress extends SocketAddress
  * support also for a single inherited UDS connection (SocketChannel)
  * getting correct local and remote addresses (instead of an
    InetAddress with some random IP and port)
  * creating new server and client UDS channels from Java

I am looking for a sponsor/mentor who will help me finish this task 
through wise advice and peer review.

My further plans:

  * finish the datagram part (sending responses to UDS does not work yet)
  * allow inheritance of multiple channels/sockets
  * getting client credentials (user name and group – where available)
  * maybe passing FDs through UDS (where available)
  * maybe FileChannel for accessing ordinary files inherited from the
    parent as FDs


*) might be just few lines in C e.g. https://blog.frantovo.cz/c/372/#toc_12

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/net-dev/attachments/20190719/22a20db8/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: openjdk-uds-08.diff
Type: text/x-patch
Size: 37616 bytes
Desc: not available
URL: <https://mail.openjdk.java.net/pipermail/net-dev/attachments/20190719/22a20db8/openjdk-uds-08-0001.diff>

More information about the net-dev mailing list