jdk/src/solaris/native/sun/nio/ch/DatagramChannelImpl.c
changeset 12047 320a714614e9
parent 5506 202f599c92aa
child 12547 ae1b2051db5d
equal deleted inserted replaced
12046:378aa3362868 12047:320a714614e9
    33 #include <sys/socket.h>
    33 #include <sys/socket.h>
    34 #include <stdlib.h>
    34 #include <stdlib.h>
    35 #include <string.h>
    35 #include <string.h>
    36 #include <errno.h>
    36 #include <errno.h>
    37 
    37 
    38 #if __linux__
    38 #if defined(__linux__) || defined(_ALLBSD_SOURCE)
    39 #include <netinet/in.h>
    39 #include <netinet/in.h>
    40 #endif
    40 #endif
    41 
    41 
    42 #include "net_util.h"
    42 #include "net_util.h"
    43 #include "net_util_md.h"
    43 #include "net_util_md.h"
    84 
    84 
    85 #ifdef __solaris__
    85 #ifdef __solaris__
    86     rv = connect(fd, 0, 0);
    86     rv = connect(fd, 0, 0);
    87 #endif
    87 #endif
    88 
    88 
    89 #ifdef __linux__
    89 #if defined(__linux__) || defined(_ALLBSD_SOURCE)
    90     {
    90     {
    91         int len;
    91         int len;
    92         SOCKADDR sa;
    92         SOCKADDR sa;
    93 
    93 
    94         memset(&sa, 0, sizeof(sa));
    94         memset(&sa, 0, sizeof(sa));
    95 
    95 
    96 #ifdef AF_INET6
    96 #ifdef AF_INET6
    97         if (ipv6_available()) {
    97         if (ipv6_available()) {
    98             struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&sa;
    98             struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)&sa;
       
    99 #if defined(_ALLBSD_SOURCE)
       
   100             him6->sin6_family = AF_INET6;
       
   101 #else
    99             him6->sin6_family = AF_UNSPEC;
   102             him6->sin6_family = AF_UNSPEC;
       
   103 #endif
   100             len = sizeof(struct sockaddr_in6);
   104             len = sizeof(struct sockaddr_in6);
   101         } else
   105         } else
   102 #endif
   106 #endif
   103         {
   107         {
   104             struct sockaddr_in *him4 = (struct sockaddr_in*)&sa;
   108             struct sockaddr_in *him4 = (struct sockaddr_in*)&sa;
       
   109 #if defined(_ALLBSD_SOURCE)
       
   110             him4->sin_family = AF_INET;
       
   111 #else
   105             him4->sin_family = AF_UNSPEC;
   112             him4->sin_family = AF_UNSPEC;
       
   113 #endif
   106             len = sizeof(struct sockaddr_in);
   114             len = sizeof(struct sockaddr_in);
   107         }
   115         }
   108 
   116 
   109         rv = connect(fd, (struct sockaddr *)&sa, len);
   117         rv = connect(fd, (struct sockaddr *)&sa, len);
       
   118 
       
   119 #if defined(_ALLBSD_SOURCE)
       
   120         if (rv < 0 && errno == EADDRNOTAVAIL)
       
   121                 rv = errno = 0;
       
   122 #endif
   110     }
   123     }
   111 #endif
   124 #endif
   112 
   125 
   113     if (rv < 0)
   126     if (rv < 0)
   114         handleSocketError(env, errno);
   127         handleSocketError(env, errno);