30 #include <sys/types.h>
31 #include <netdb.h>
32 #include <netinet/in.h>
33 #include <unistd.h>
34
35 #ifndef USE_SELECT
36 #include <sys/poll.h>
37 #endif
38
39
40 /*
41 AIX needs a workaround for I/O cancellation, see:
42 http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm
43 ...
44 The close subroutine is blocked until all subroutines which use the file
45 descriptor return to usr space. For example, when a thread is calling close
46 and another thread is calling select with the same file descriptor, the
47 close subroutine does not return until the select call returns.
48 ...
49 */
50 #if defined(__linux__) || defined(MACOSX) || defined (_AIX)
51 extern int NET_Timeout(int s, long timeout);
52 extern int NET_Read(int s, void* buf, size_t len);
53 extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
54 struct sockaddr *from, int *fromlen);
55 extern int NET_ReadV(int s, const struct iovec * vector, int count);
56 extern int NET_Send(int s, void *msg, int len, unsigned int flags);
57 extern int NET_SendTo(int s, const void *msg, int len, unsigned int
58 flags, const struct sockaddr *to, int tolen);
59 extern int NET_Writev(int s, const struct iovec * vector, int count);
60 extern int NET_Connect(int s, struct sockaddr *addr, int addrlen);
61 extern int NET_Accept(int s, struct sockaddr *addr, int *addrlen);
62 extern int NET_SocketClose(int s);
63 extern int NET_Dup2(int oldfd, int newfd);
64
65 #ifdef USE_SELECT
66 extern int NET_Select(int s, fd_set *readfds, fd_set *writefds,
67 fd_set *exceptfds, struct timeval *timeout);
68 #else
69 extern int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout);
70 #endif
71
72 #else
73
74 #define NET_Timeout JVM_Timeout
75 #define NET_Read JVM_Read
76 #define NET_RecvFrom JVM_RecvFrom
77 #define NET_ReadV readv
78 #define NET_Send JVM_Send
79 #define NET_SendTo JVM_SendTo
80 #define NET_WriteV writev
81 #define NET_Connect JVM_Connect
82 #define NET_Accept JVM_Accept
83 #define NET_SocketClose JVM_SocketClose
84 #define NET_Dup2 dup2
85 #define NET_Select select
86 #define NET_Poll poll
87
88 #endif
89
90 #if defined(__linux__) && defined(AF_INET6)
91 int getDefaultIPv6Interface(struct in6_addr *target_addr);
92 #endif
93
94
95 /* needed from libsocket on Solaris 8 */
96
97 typedef int (*getaddrinfo_f)(const char *nodename, const char *servname,
98 const struct addrinfo *hints, struct addrinfo **res);
99
100 typedef void (*freeaddrinfo_f)(struct addrinfo *);
101
102 typedef const char * (*gai_strerror_f)(int ecode);
103
104 typedef int (*getnameinfo_f)(const struct sockaddr *, size_t,
105 char *, size_t, char *, size_t, int);
106
107 extern getaddrinfo_f getaddrinfo_ptr;
|
30 #include <sys/types.h>
31 #include <netdb.h>
32 #include <netinet/in.h>
33 #include <unistd.h>
34
35 #ifndef USE_SELECT
36 #include <sys/poll.h>
37 #endif
38
39
40 /*
41 AIX needs a workaround for I/O cancellation, see:
42 http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/close.htm
43 ...
44 The close subroutine is blocked until all subroutines which use the file
45 descriptor return to usr space. For example, when a thread is calling close
46 and another thread is calling select with the same file descriptor, the
47 close subroutine does not return until the select call returns.
48 ...
49 */
50 #if defined (_AIX)
51 extern int IO_Fcntl(int s, int cmd, void *arg);
52 extern int IO_Read(int s, void* buf, size_t len);
53 extern int IO_Write(int s, void* buf, size_t len);
54 #endif
55
56 #if defined(__linux__) || defined(MACOSX) || defined (_AIX)
57 extern int NET_Timeout(int s, long timeout);
58 extern int NET_Read(int s, void* buf, size_t len);
59 extern int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
60 struct sockaddr *from, int *fromlen);
61 extern int NET_ReadV(int s, const struct iovec * vector, int count);
62 extern int NET_Send(int s, void *msg, int len, unsigned int flags);
63 extern int NET_SendTo(int s, const void *msg, int len, unsigned int
64 flags, const struct sockaddr *to, int tolen);
65 extern int NET_WriteV(int s, const struct iovec * vector, int count);
66 extern int NET_Connect(int s, struct sockaddr *addr, int addrlen);
67 extern int NET_Accept(int s, struct sockaddr *addr, int *addrlen);
68 extern int NET_SocketClose(int s);
69 extern int NET_Dup2(int oldfd, int newfd);
70
71 #ifdef USE_SELECT
72 extern int NET_Select(int s, fd_set *readfds, fd_set *writefds,
73 fd_set *exceptfds, struct timeval *timeout);
74 #else
75 extern int NET_Poll(struct pollfd *ufds, unsigned int nfds, int timeout);
76 #endif
77
78 #else
79
80 #define NET_Timeout JVM_Timeout
81 #define NET_Read JVM_Read
82 #define NET_RecvFrom JVM_RecvFrom
83 #define NET_ReadV readv
84 #define NET_Send JVM_Send
85 #define NET_SendTo JVM_SendTo
86 #define NET_WriteV writev
87 #define NET_Connect JVM_Connect
88 #define NET_Accept JVM_Accept
89 #define NET_SocketClose JVM_SocketClose
90 #define NET_Dup2 dup2
91 #define NET_Select select
92 #define NET_Poll poll
93
94 #endif
95
96 #ifdef _AIX
97 /* defined in src/aix/native/java/net/aix_close.c */
98 int javaToNativeEvents(int javaEvents);
99 int nativeToJavaEvents(int nativeEvents);
100 #endif
101
102 #if defined(__linux__) && defined(AF_INET6)
103 int getDefaultIPv6Interface(struct in6_addr *target_addr);
104 #endif
105
106
107 /* needed from libsocket on Solaris 8 */
108
109 typedef int (*getaddrinfo_f)(const char *nodename, const char *servname,
110 const struct addrinfo *hints, struct addrinfo **res);
111
112 typedef void (*freeaddrinfo_f)(struct addrinfo *);
113
114 typedef const char * (*gai_strerror_f)(int ecode);
115
116 typedef int (*getnameinfo_f)(const struct sockaddr *, size_t,
117 char *, size_t, char *, size_t, int);
118
119 extern getaddrinfo_f getaddrinfo_ptr;
|