src/solaris/native/sun/nio/ch/DatagramChannelImpl.c

Print this page
rev 8975 : 8031581: PPC64: Addons and fixes for AIX to pass the jdk regression tests


  64     dci_senderID = (*env)->GetFieldID(env, clazz, "sender",
  65                                       "Ljava/net/SocketAddress;");
  66     dci_senderAddrID = (*env)->GetFieldID(env, clazz,
  67                                           "cachedSenderInetAddress",
  68                                           "Ljava/net/InetAddress;");
  69     dci_senderPortID = (*env)->GetFieldID(env, clazz,
  70                                           "cachedSenderPort", "I");
  71 }
  72 
  73 JNIEXPORT void JNICALL
  74 Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this,
  75                                                 jobject fdo, jboolean isIPv6)
  76 {
  77     jint fd = fdval(env, fdo);
  78     int rv;
  79 
  80 #ifdef __solaris__
  81     rv = connect(fd, 0, 0);
  82 #endif
  83 
  84 #if defined(__linux__) || defined(_ALLBSD_SOURCE)
  85     {
  86         int len;
  87         SOCKADDR sa;
  88 
  89         memset(&sa, 0, sizeof(sa));
  90 
  91 #ifdef AF_INET6
  92         if (isIPv6) {
  93             struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&sa;
  94 #if defined(_ALLBSD_SOURCE)
  95             him6->sin6_family = AF_INET6;
  96 #else
  97             him6->sin6_family = AF_UNSPEC;
  98 #endif
  99             len = sizeof(struct sockaddr_in6);
 100         } else
 101 #endif
 102         {
 103             struct sockaddr_in *him4 = (struct sockaddr_in*)&sa;
 104 #if defined(_ALLBSD_SOURCE)
 105             him4->sin_family = AF_INET;
 106 #else
 107             him4->sin_family = AF_UNSPEC;
 108 #endif
 109             len = sizeof(struct sockaddr_in);
 110         }
 111 
 112         rv = connect(fd, (struct sockaddr *)&sa, len);
 113 
 114 #if defined(_ALLBSD_SOURCE)
 115         if (rv < 0 && errno == EADDRNOTAVAIL)








 116                 rv = errno = 0;
 117 #endif
 118     }
 119 #endif
 120 
 121     if (rv < 0)
 122         handleSocketError(env, errno);
 123 
 124 }
 125 
 126 JNIEXPORT jint JNICALL
 127 Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this,
 128                                              jobject fdo, jlong address,
 129                                              jint len, jboolean connected)
 130 {
 131     jint fd = fdval(env, fdo);
 132     void *buf = (void *)jlong_to_ptr(address);
 133     SOCKADDR sa;
 134     socklen_t sa_len = SOCKADDR_LEN;
 135     jboolean retry = JNI_FALSE;




  64     dci_senderID = (*env)->GetFieldID(env, clazz, "sender",
  65                                       "Ljava/net/SocketAddress;");
  66     dci_senderAddrID = (*env)->GetFieldID(env, clazz,
  67                                           "cachedSenderInetAddress",
  68                                           "Ljava/net/InetAddress;");
  69     dci_senderPortID = (*env)->GetFieldID(env, clazz,
  70                                           "cachedSenderPort", "I");
  71 }
  72 
  73 JNIEXPORT void JNICALL
  74 Java_sun_nio_ch_DatagramChannelImpl_disconnect0(JNIEnv *env, jobject this,
  75                                                 jobject fdo, jboolean isIPv6)
  76 {
  77     jint fd = fdval(env, fdo);
  78     int rv;
  79 
  80 #ifdef __solaris__
  81     rv = connect(fd, 0, 0);
  82 #endif
  83 
  84 #if defined(__linux__) || defined(_ALLBSD_SOURCE) || defined(_AIX)
  85     {
  86         int len;
  87         SOCKADDR sa;
  88 
  89         memset(&sa, 0, sizeof(sa));
  90 
  91 #ifdef AF_INET6
  92         if (isIPv6) {
  93             struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&sa;
  94 #if defined(_ALLBSD_SOURCE)
  95             him6->sin6_family = AF_INET6;
  96 #else
  97             him6->sin6_family = AF_UNSPEC;
  98 #endif
  99             len = sizeof(struct sockaddr_in6);
 100         } else
 101 #endif
 102         {
 103             struct sockaddr_in *him4 = (struct sockaddr_in*)&sa;
 104 #if defined(_ALLBSD_SOURCE)
 105             him4->sin_family = AF_INET;
 106 #else
 107             him4->sin_family = AF_UNSPEC;
 108 #endif
 109             len = sizeof(struct sockaddr_in);
 110         }
 111 
 112         rv = connect(fd, (struct sockaddr *)&sa, len);
 113 
 114 #if defined(_ALLBSD_SOURCE)
 115         if (rv < 0 && errno == EADDRNOTAVAIL)
 116                 rv = errno = 0;
 117 #endif
 118 #if defined(_AIX)
 119         /* See W. Richard Stevens, "UNIX Network Programming, Volume 1", p. 254:
 120          * 'Setting the address family to AF_UNSPEC might return EAFNOSUPPORT
 121          * but that is acceptable.
 122          */
 123         if (rv < 0 && errno == EAFNOSUPPORT)
 124                 rv = errno = 0;
 125 #endif
 126     }
 127 #endif
 128 
 129     if (rv < 0)
 130         handleSocketError(env, errno);
 131 
 132 }
 133 
 134 JNIEXPORT jint JNICALL
 135 Java_sun_nio_ch_DatagramChannelImpl_receive0(JNIEnv *env, jobject this,
 136                                              jobject fdo, jlong address,
 137                                              jint len, jboolean connected)
 138 {
 139     jint fd = fdval(env, fdo);
 140     void *buf = (void *)jlong_to_ptr(address);
 141     SOCKADDR sa;
 142     socklen_t sa_len = SOCKADDR_LEN;
 143     jboolean retry = JNI_FALSE;