我的服务A通过UNIX与同一主机上的另一个服务B通信。我所掌握的唯一信息是套接字文件描述符的值,其中服务B准备通过套接字向服务A发送数据。我使用第三方库junixsocket在服务之间通过UDS进行通信。我的问题是如何使用这个库连接到服务上的套接字--端只知道套接字文件描述符?
我刚刚找到了如何连接到服务上的套接字--端使用socketPath:
File socketFile = new File("/path/to/your/socket"); AFUNIXSocket sock = AFUNIXSocket.newInstance(); sock.connect(new AFUNIXSocketAddress(socketFile));
但是我需要知道如何用文件描述符连接到它。
我正在使用openJDK-11,这就是为什么我必须使用第三方库来进行UDS通信。
发布于 2022-10-14 11:31:23
由于junixSocket2.4(尽管您应该使用最新版本,目前为2.5.2),我们支持将FileDescriptor“强制转换”到其他几个对象,如Socket、InputStream等。
junixsocket将确保“强制转换”(因为它返回另一个对象而不是简单的强制转换)成功--只要转换是有效的。
示例:
FileDescriptor fd = ...;
AFUNIXSocket socket = FileDescriptorCast.using(fd).as(AFUNIXSocket.class);这里有更多详细信息:https://kohlschutter.github.io/junixsocket/filedescriptors.html
https://stackoverflow.com/questions/68913811
复制相似问题