< prev index next >

src/java.base/unix/native/libnio/ch/InheritedChannel.c

Print this page

        

@@ -35,11 +35,11 @@
 #include "jni_util.h"
 #include "net_util.h"
 
 #include "sun_nio_ch_InheritedChannel.h"
 
-static int matchFamily(SOCKETADDRESS *sa) {
+static int matchFamilyInet(SOCKETADDRESS *sa) {
     return (sa->sa.sa_family == (ipv6_available() ? AF_INET6 : AF_INET));
 }
 
 JNIEXPORT void JNICALL
 Java_sun_nio_ch_InheritedChannel_initIDs(JNIEnv *env, jclass cla)

@@ -47,35 +47,50 @@
     /* Initialize InetAddress IDs before later use of NET_XXX functions */
     initInetAddressIDs(env);
 }
 
 JNIEXPORT jobject JNICALL
-Java_sun_nio_ch_InheritedChannel_peerAddress0(JNIEnv *env, jclass cla, jint fd)
+Java_sun_nio_ch_InheritedChannel_peerAddressInet(JNIEnv *env, jclass cla, jint fd)
 {
     SOCKETADDRESS sa;
     socklen_t len = sizeof(SOCKETADDRESS);
     jobject remote_ia = NULL;
     jint remote_port;
 
     if (getpeername(fd, &sa.sa, &len) == 0) {
-        if (matchFamily(&sa)) {
+        if (matchFamilyInet(&sa)) {
             remote_ia = NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
         }
     }
 
     return remote_ia;
 }
 
+JNIEXPORT jstring JNICALL
+Java_sun_nio_ch_InheritedChannel_peerAddressUnix(JNIEnv *env, jclass cla, jint fd)
+{
+    struct sockaddr_un sa;
+    socklen_t len = sizeof(struct sockaddr_un);
+    jobject remote_sa = NULL;
+
+    if (getpeername(fd, (struct sockaddr *)&sa, &len) == 0) {
+        if (sa.sun_family == AF_UNIX) {
+            remote_sa = NET_SockaddrToUnixAddressString(env, &sa, len);
+        }
+    }
+    return remote_sa;
+}
+
 JNIEXPORT jint JNICALL
 Java_sun_nio_ch_InheritedChannel_peerPort0(JNIEnv *env, jclass cla, jint fd)
 {
     SOCKETADDRESS sa;
     socklen_t len = sizeof(SOCKETADDRESS);
     jint remote_port = -1;
 
-    if (getpeername(fd, &sa.sa, &len) == 0) {
-        if (matchFamily(&sa)) {
+    if (getpeername(fd, (struct sockaddr *)&sa.sa, &len) == 0) {
+        if (matchFamilyInet(&sa)) {
             NET_SockaddrToInetAddress(env, &sa, (int *)&remote_port);
         }
     }
 
     return remote_port;
< prev index next >