You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/07/15 07:39:25 UTC
svn commit: r1146963 - in /commons/sandbox/runtime/trunk/src/main/native:
include/acr/ os/linux/ os/unix/ os/win32/ shared/
Author: mturk
Date: Fri Jul 15 05:39:24 2011
New Revision: 1146963
URL: http://svn.apache.org/viewvc?rev=1146963&view=rev
Log:
Simplify socket and file structures
Modified:
commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h
commons/sandbox/runtime/trunk/src/main/native/include/acr/netapi.h
commons/sandbox/runtime/trunk/src/main/native/os/linux/epoll.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/inetsock.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/localsock.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/poll.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/pollset.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/sockstream.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/localsock.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/poll.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/pollset.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/selectset.c
commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
commons/sandbox/runtime/trunk/src/main/native/shared/netaddr.c
commons/sandbox/runtime/trunk/src/main/native/shared/select.c
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/descriptor.h Fri Jul 15 05:39:24 2011
@@ -35,22 +35,41 @@
typedef struct acr_fd_t acr_fd_t;
struct acr_fd_t {
- volatile acr_atomic32_t refs; /**< Reference counter */
- int type; /**< Descriptor type */
+ volatile acr_atomic32_t refs; /**< Reference counter */
+ int type; /**< Descriptor type */
+ int timeout; /**< Timeout in milliseconds */
+ int flags;
+#if defined(WINDOWS)
+ union {
+ HANDLE h;
+ SOCKET s;
+ };
+#else
+ int f;
+#endif
+};
+
+typedef struct acr_sd_t acr_sd_t;
+struct acr_sd_t {
+ volatile acr_atomic32_t refs; /**< Reference counter */
+ int type; /**< Descriptor type */
int timeout;
int flags;
+#if defined(WINDOWS)
union {
- jlong nh;
- void *p;
- int f;
+ HANDLE h;
+ SOCKET s;
+ };
+#else
+ int s;
+#endif
#if defined(WINDOWS)
- HANDLE h;
- SOCKET s;
+ WCHAR *localsock;
+ LPOVERLAPPED pob; /**< For TransmitFile */
#else
- int h;
- int s;
+ off_t off;
+ size_t len;
#endif
- } u;
};
#ifdef __cplusplus
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr/netapi.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr/netapi.h?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr/netapi.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr/netapi.h Fri Jul 15 05:39:24 2011
@@ -67,8 +67,8 @@ extern "C" {
#endif
void AcrSelectionKeyReset(JNI_STDARGS);
-int AcrGetLocalAddr(acr_fd_t *sockfd, acr_sockaddr_t *sockaddr);
-int AcrGetRemoteAddr(acr_fd_t *sockfd, acr_sockaddr_t *sockaddr);
+int AcrGetLocalAddr(acr_sd_t *sockfd, acr_sockaddr_t *sockaddr);
+int AcrGetRemoteAddr(acr_sd_t *sockfd, acr_sockaddr_t *sockaddr);
#ifdef __cplusplus
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/linux/epoll.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/linux/epoll.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/linux/epoll.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/linux/epoll.c Fri Jul 15 05:39:24 2011
@@ -299,7 +299,7 @@ ACR_NET_EXPORT(jint, UnixSelector, add0)
struct epoll_event ev;
pfd_elem_t *pe;
acr_pollset_t *ps = J2P(pollset, acr_pollset_t *);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
pthread_mutex_lock(&ps->mutex);
if (AcrAtomic32Equ(&ps->state, PSS_DESTROY)) {
@@ -307,7 +307,7 @@ ACR_NET_EXPORT(jint, UnixSelector, add0)
goto cleanup;
}
ACR_RING_FOREACH(pe, &ps->eset_ring, pfd_elem_t, link) {
- if (fd->u.s == pe->fd) {
+ if (fd->s == pe->fd) {
/* Duplicate descriptor
*/
rc = ACR_EALREADY;
@@ -328,7 +328,7 @@ ACR_NET_EXPORT(jint, UnixSelector, add0)
ACR_RING_ELEM_INIT(pe, link);
}
- pe->fd = fd->u.s;
+ pe->fd = fd->s;
pe->ievents = ieventt(events);
pe->revents = 0;
pe->obj = (*env)->NewGlobalRef(env, fo);
@@ -372,7 +372,7 @@ ACR_NET_EXPORT(jint, UnixSelector, del0)
struct epoll_event ev = { 0 };
pfd_elem_t *pe = 0;
acr_pollset_t *ps = J2P(pollset, acr_pollset_t *);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
pthread_mutex_lock(&ps->mutex);
if (AcrAtomic32Equ(&ps->state, PSS_DESTROY) || ps->used < 2) {
@@ -383,9 +383,9 @@ ACR_NET_EXPORT(jint, UnixSelector, del0)
* They usually mean the fd was not registered with this
* epoll instance or already closed.
*/
- epoll_ctl(ps->epfd, EPOLL_CTL_DEL, fd->u.s, &ev);
+ epoll_ctl(ps->epfd, EPOLL_CTL_DEL, fd->s, &ev);
ACR_RING_FOREACH(pe, &ps->eset_ring, pfd_elem_t, link) {
- if (fd->u.s == pe->fd) {
+ if (fd->s == pe->fd) {
/* Unref descriptor */
(*env)->DeleteGlobalRef(env, pe->obj);
ACR_RING_REMOVE(pe, link);
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/inetsock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/inetsock.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/inetsock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/inetsock.c Fri Jul 15 05:39:24 2011
@@ -25,13 +25,13 @@
#include <poll.h>
#include <sys/un.h>
-ACR_INLINE(int) _retain_sd(acr_fd_t *sd)
+ACR_INLINE(int) _retain_sd(acr_sd_t *sd)
{
AcrAtomic32Inc(&sd->refs);
- return sd->u.s;
+ return sd->s;
}
-ACR_INLINE(void) _release_sd(acr_fd_t *sd)
+ACR_INLINE(void) _release_sd(acr_sd_t *sd)
{
if (AcrAtomic32Dec(&sd->refs) == 0) {
/* Socket was closed while we were
@@ -50,7 +50,7 @@ ACR_NET_EXPORT(jlong, SocketDescriptor,
int rc = 0;
int af = AF_UNSPEC;
int type = 0;
- acr_fd_t *sp;
+ acr_sd_t *sp;
switch (stype) {
case 1:
@@ -100,14 +100,14 @@ ACR_NET_EXPORT(jlong, SocketDescriptor,
ACR_THROW_NET_ERROR(rc);
return 0;
}
- if ((sp = ACR_TALLOC(acr_fd_t)) == 0) {
+ if ((sp = ACR_TALLOC(acr_sd_t)) == 0) {
r_close(sd);
return 0;
}
sp->type = ACR_DT_SOCKET;
sp->timeout = -1;
sp->refs = 1;
- sp->u.s = sd;
+ sp->s = sd;
if (block == JNI_FALSE) {
sp->flags = ACR_DT_NONBLOCK;
sp->timeout = 0;
@@ -118,13 +118,13 @@ ACR_NET_EXPORT(jlong, SocketDescriptor,
ACR_NET_EXPORT(jint, SocketDescriptor, close0)(JNI_STDARGS, jlong fp)
{
int sd, rc = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (fd == 0)
return ACR_EBADF;
- sd = fd->u.s;
+ sd = fd->s;
if (sd != -1) {
- fd->u.s = -1;
+ fd->s = -1;
if (r_close(sd) == -1)
rc = ACR_GET_OS_ERROR();
}
@@ -136,9 +136,9 @@ ACR_NET_EXPORT(jint, SocketDescriptor, c
ACR_NET_EXPORT(jint, SocketDescriptor, sendz0)(JNI_STDARGS, jlong fp)
{
char dummy = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if (r_write(fd->u.s, &dummy, 0) == -1)
+ if (r_write(fd->s, &dummy, 0) == -1)
return ACR_GET_OS_ERROR();
else
return 0;
@@ -149,7 +149,7 @@ ACR_NET_EXPORT(jint, SocketDescriptor, s
{
int rc = 0;
int sd;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (fd == 0)
return ACR_EBADF;
@@ -160,7 +160,7 @@ ACR_NET_EXPORT(jint, SocketDescriptor, s
else
how = SHUT_RDWR;
sd = _retain_sd(fd);
- if (shutdown(fd->u.s, how) == -1)
+ if (shutdown(fd->s, how) == -1)
rc = ACR_GET_NETOS_ERROR();
_release_sd(fd);
if (how != 1)
@@ -171,18 +171,18 @@ ACR_NET_EXPORT(jint, SocketDescriptor, s
ACR_NET_EXPORT(jint, SocketDescriptor, block0)(JNI_STDARGS, jlong fp, jboolean on)
{
int rc = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (on == JNI_TRUE) {
if ((fd->flags & ACR_DT_NONBLOCK) != 0 &&
- (rc = AcrNonblock(fd->u.s, 0)) == 0) {
+ (rc = AcrNonblock(fd->s, 0)) == 0) {
fd->timeout = -1;
#if HAVE_SO_RCVTIMEO && HAVE_SO_SNDTIMEO
{
int zero = 0;
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
}
#endif
@@ -191,7 +191,7 @@ ACR_NET_EXPORT(jint, SocketDescriptor, b
}
else {
if ((fd->flags & ACR_DT_NONBLOCK) == 0 &&
- (rc = AcrNonblock(fd->u.s, 1)) == 0) {
+ (rc = AcrNonblock(fd->s, 1)) == 0) {
if (fd->timeout < 0)
fd->timeout = 0;
fd->flags |= ACR_DT_NONBLOCK;
@@ -202,7 +202,7 @@ ACR_NET_EXPORT(jint, SocketDescriptor, b
ACR_NET_EXPORT(jboolean, SocketDescriptor, isBlocking0)(JNI_STDARGS, jlong fp)
{
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if ((fd->flags & ACR_DT_NONBLOCK) == 0)
return JNI_TRUE;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/localsock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/localsock.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/localsock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/localsock.c Fri Jul 15 05:39:24 2011
@@ -34,13 +34,13 @@
#define SOCKADDR_RELEASE(BA, SA) \
AcrReleaseArrayCritical(env, (BA), (SA))
-ACR_INLINE(int) _retain_sd(acr_fd_t *sd)
+ACR_INLINE(int) _retain_sd(acr_sd_t *sd)
{
AcrAtomic32Inc(&sd->refs);
- return sd->u.s;
+ return sd->s;
}
-ACR_INLINE(void) _release_sd(acr_fd_t *sd)
+ACR_INLINE(void) _release_sd(acr_sd_t *sd)
{
if (AcrAtomic32Dec(&sd->refs) == 0) {
/* Socket was closed while we were
@@ -55,13 +55,13 @@ ACR_INLINE(void) _release_sd(acr_fd_t *s
ACR_NET_EXPORT(jint, LocalDescriptor, close0)(JNI_STDARGS, jlong fp)
{
int sd, rc = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (fd == 0)
return ACR_EBADF;
- sd = fd->u.s;
+ sd = fd->s;
if (sd != -1) {
- fd->u.s = -1;
+ fd->s = -1;
if (r_close(sd) == -1)
rc = ACR_GET_OS_ERROR();
}
@@ -75,7 +75,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, sh
{
int rc = 0;
int sd;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (fd == 0)
return ACR_EBADF;
@@ -97,9 +97,9 @@ ACR_NET_EXPORT(jint, LocalDescriptor, sh
ACR_NET_EXPORT(jint, LocalDescriptor, sendz0)(JNI_STDARGS, jlong fp)
{
char dummy = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if (r_write(fd->u.s, &dummy, 0) == -1)
+ if (r_write(fd->s, &dummy, 0) == -1)
return ACR_GET_OS_ERROR();
else
return 0;
@@ -112,7 +112,7 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
int rc = 0;
int type = 0;
- acr_fd_t *sp;
+ acr_sd_t *sp;
switch (stype) {
case 1:
@@ -152,14 +152,14 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
ACR_THROW_NET_ERROR(rc);
return 0;
}
- if ((sp = ACR_TALLOC(acr_fd_t)) == 0) {
+ if ((sp = ACR_TALLOC(acr_sd_t)) == 0) {
r_close(sd);
return 0;
}
sp->type = ACR_DT_LSOCK;
sp->timeout = -1;
sp->refs = 1;
- sp->u.s = sd;
+ sp->s = sd;
if (block == JNI_FALSE) {
sp->flags = ACR_DT_NONBLOCK;
sp->timeout = 0;
@@ -170,18 +170,18 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
ACR_NET_EXPORT(jint, LocalDescriptor, block0)(JNI_STDARGS, jlong fp, jboolean on)
{
int rc = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (on == JNI_TRUE) {
if ((fd->flags & ACR_DT_NONBLOCK) != 0 &&
- (rc = AcrNonblock(fd->u.s, 0)) == 0) {
+ (rc = AcrNonblock(fd->s, 0)) == 0) {
fd->timeout = -1;
#if HAVE_SO_RCVTIMEO && HAVE_SO_SNDTIMEO
{
int zero = 0;
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
}
#endif
@@ -190,7 +190,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, bl
}
else {
if ((fd->flags & ACR_DT_NONBLOCK) == 0 &&
- (rc = AcrNonblock(fd->u.s, 1)) == 0) {
+ (rc = AcrNonblock(fd->s, 1)) == 0) {
if (fd->timeout < 0)
fd->timeout = 0;
fd->flags |= ACR_DT_NONBLOCK;
@@ -202,42 +202,42 @@ ACR_NET_EXPORT(jint, LocalDescriptor, bl
ACR_NET_EXPORT(jint, LocalDescriptor, tmset0)(JNI_STDARGS, jlong fp, jint timeout)
{
int rc;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (timeout == 0) {
if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
- if ((rc = AcrNonblock(fd->u.s, 1)) != 0)
+ if ((rc = AcrNonblock(fd->s, 1)) != 0)
return rc;
fd->flags |= ACR_DT_NONBLOCK;
}
}
else if (timeout > 0) {
if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
- if ((rc = AcrNonblock(fd->u.s, 1)) != 0)
+ if ((rc = AcrNonblock(fd->s, 1)) != 0)
return rc;
fd->flags |= ACR_DT_NONBLOCK;
}
#if HAVE_SO_RCVTIMEO && HAVE_SO_SNDTIMEO
if (fd->timeout != timeout) {
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&timeout, (socklen_t)sizeof(timeout));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&timeout, (socklen_t)sizeof(timeout));
}
#endif
}
else if (timeout < 0) {
if ((fd->flags & ACR_DT_NONBLOCK) != 0) {
- if ((rc = AcrNonblock(fd->u.s, 0)) != 0)
+ if ((rc = AcrNonblock(fd->s, 0)) != 0)
return rc;
fd->flags &= ~ACR_DT_NONBLOCK;
}
#if HAVE_SO_RCVTIMEO && HAVE_SO_SNDTIMEO
{
int zero = 0;
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
}
#endif
@@ -248,7 +248,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, tm
ACR_NET_EXPORT(jboolean, LocalDescriptor, isBlocking0)(JNI_STDARGS, jlong fp)
{
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if ((fd->flags & ACR_DT_NONBLOCK) == 0)
return JNI_TRUE;
@@ -259,9 +259,9 @@ ACR_NET_EXPORT(jboolean, LocalDescriptor
/* Use non-blocking I/O
*/
long mode;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if ((mode = fcntl(fd->u.s, F_GETFL, 0)) == -1) {
+ if ((mode = fcntl(fd->s, F_GETFL, 0)) == -1) {
ACR_THROW_NET_ERRNO();
return JNI_TRUE;
}
@@ -282,7 +282,7 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
int rc;
int sd;
acr_sockaddr_t *ca = SOCKADDR_CAST(cb);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
sd = _retain_sd(fd);
if (timeout == 0)
@@ -304,7 +304,7 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
if (rc != 0) {
if (timeout > 0) {
if (rc == EINPROGRESS || rc == EALREADY) {
- rc = AcrWaitIO(fd->u.s, timeout, POLLOUT);
+ rc = AcrWaitIO(fd->s, timeout, POLLOUT);
#if defined(SO_ERROR)
if (rc == 0) {
int err;
@@ -317,7 +317,7 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
#endif
}
if ((fd->type & ACR_DT_NONBLOCK) == 0)
- AcrNonblock(fd->u.s, 0);
+ AcrNonblock(fd->s, 0);
}
}
finally:
@@ -331,12 +331,12 @@ ACR_NET_EXPORT(jint, LocalServerEndpoint
{
int rc = 0;
acr_sockaddr_t *aa = SOCKADDR_CAST(ba);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if (bind(fd->u.s, (const struct sockaddr *)&aa->sa, aa->salen) == -1)
+ if (bind(fd->s, (const struct sockaddr *)&aa->sa, aa->salen) == -1)
rc = errno;
SOCKADDR_RELEASE(ba, aa);
- if (rc == 0 && listen(fd->u.s, backlog) == -1)
+ if (rc == 0 && listen(fd->s, backlog) == -1)
rc = errno;
return rc;
}
@@ -360,8 +360,8 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
int ad;
acr_sockaddr_t aa;
socklen_t aalen;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
- acr_fd_t *sp;
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
+ acr_sd_t *sp;
#if HAVE_ACCEPT4
int flags = SOCK_CLOEXEC;
@@ -425,7 +425,7 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
ACR_DEBUG_TRACE("Expected AF_LOCAL but found %d\n", aa.sa.unx.sun_family);
}
#endif
- if ((sp = ACR_TALLOC(acr_fd_t)) == 0) {
+ if ((sp = ACR_TALLOC(acr_sd_t)) == 0) {
r_close(sd);
return 0;
}
@@ -433,7 +433,7 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
sp->flags = fd->flags & ~ACR_DT_NONBLOCK;
sp->timeout = fd->timeout;
sp->refs = 1;
- sp->u.s = sd;
+ sp->s = sd;
if (block == JNI_FALSE) {
sp->flags |= ACR_DT_NONBLOCK;
if (sp->timeout < 0)
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/poll.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/poll.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/poll.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/poll.c Fri Jul 15 05:39:24 2011
@@ -86,7 +86,7 @@ ACR_NET_EXPORT(jint, Poll, wait0)(JNI_ST
pfdset = JARRAY_CRITICAL(jlong, fdset);
pevents = JARRAY_CRITICAL(jshort, events);
for (i = 0; i < nevents; i++) {
- pfd[i].fd = (J2P(pfdset[i], acr_fd_t *))->u.s;
+ pfd[i].fd = (J2P(pfdset[i], acr_sd_t *))->s;
pfd[i].events = ieventt(pevents[i]);
pfd[i].revents = 0;
}
@@ -133,9 +133,9 @@ ACR_NET_EXPORT(jshort, Poll, wait1)(JNI_
int ns;
struct pollfd pfd;
acr_time_t tmx = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- pfd.fd = fd->u.s;
+ pfd.fd = fd->s;
pfd.events = ieventt(events);
pfd.revents = 0;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pollset.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pollset.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/pollset.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pollset.c Fri Jul 15 05:39:24 2011
@@ -410,7 +410,7 @@ ACR_NET_EXPORT(jint, PollSelector, add0)
{
int i, rc = 0;
acr_pollset_t *ps = J2P(pollset, acr_pollset_t *);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
pthread_mutex_lock(&ps->mutex);
while (!AcrAtomic32Equ(&ps->state, 0)) {
@@ -429,14 +429,14 @@ ACR_NET_EXPORT(jint, PollSelector, add0)
goto cleanup;
}
for (i = 1; i < ps->used; i++) {
- if (ps->fdset[i].fd == fd->u.s) {
+ if (ps->fdset[i].fd == fd->s) {
/* Duplicate descriptor
*/
rc = ACR_EALREADY;
goto cleanup;
}
}
- ps->fdset[ps->used].fd = fd->u.s;
+ ps->fdset[ps->used].fd = fd->s;
ps->fdset[ps->used].events = ieventt(events);
ps->fdset[ps->used].revents = 0;
ps->ooset[ps->used].obj = (*env)->NewGlobalRef(env, fo);
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/sockstream.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/sockstream.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/sockstream.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/sockstream.c Fri Jul 15 05:39:24 2011
@@ -37,14 +37,14 @@
AcrReleaseArrayCritical(env, (BA), (SA))
typedef struct acr_ss_t {
- acr_fd_t *fd;
+ acr_sd_t *fd;
} acr_ss_t;
ACR_INLINE(int) _retain_sd(acr_ss_t *ss)
{
if (ss->fd != 0) {
AcrAtomic32Inc(&ss->fd->refs);
- return ss->fd->u.s;
+ return ss->fd->s;
}
else
return -1;
@@ -66,9 +66,9 @@ ACR_INLINE(void) _release_sd(acr_ss_t *s
ACR_NET_EXPORT(jlong, SocketStream, alloc0)(JNI_STDARGS, jlong fp)
{
acr_ss_t *ss;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if (fd == 0 || fd->u.s == -1) {
+ if (fd == 0 || fd->s == -1) {
ACR_THROW_NET_ERROR(ACR_EBADF);
return 0;
}
@@ -103,11 +103,11 @@ ACR_NET_EXPORT(jint, SocketStream, avail
acr_ss_t *ss = J2P(sp, acr_ss_t *);
#if defined(FIONREAD)
- if (ioctl(ss->fd->u.s, FIONREAD, &avail) != 0)
+ if (ioctl(ss->fd->s, FIONREAD, &avail) != 0)
avail = -1;
#else
char d[8];
- avail = (int)recv(ss->fd->u.s, d, sizeof(d), MSG_PEEK);
+ avail = (int)recv(ss->fd->s, d, sizeof(d), MSG_PEEK);
#endif
return avail;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/localsock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/localsock.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/localsock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/localsock.c Fri Jul 15 05:39:24 2011
@@ -41,18 +41,19 @@
#define SOCKADDR_RELEASE(BA, SA) \
AcrReleaseArrayCritical(env, (BA), (SA))
-typedef struct wls_fd_t {
- acr_fd_t fd;
- HANDLE fh;
-} wls_fd_t;
+typedef struct wls_sd_t {
+ acr_sd_t fd;
+ HANDLE fh;
+ LPOVERLAPPED op;
+} wls_sd_t;
-ACR_INLINE(SOCKET) _retain_sd(acr_fd_t *sd)
+ACR_INLINE(SOCKET) _retain_sd(acr_sd_t *sd)
{
AcrAtomic32Inc(&sd->refs);
- return sd->u.s;
+ return sd->s;
}
-ACR_INLINE(void) _release_sd(acr_fd_t *sd)
+ACR_INLINE(void) _release_sd(acr_sd_t *sd)
{
if (AcrAtomic32Dec(&sd->refs) == 0) {
/* Socket was closed while we were
@@ -68,20 +69,29 @@ ACR_NET_EXPORT(jint, LocalDescriptor, cl
{
int rc = 0;
SOCKET sd;
- wls_fd_t *wd = J2P(fp, wls_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (wd == 0)
return ACR_EBADF;
- sd = wd->fd.u.s;
+ sd = fd->s;
+ if (wd->pob != 0) {
+ /* Close TransmitFile overlapped struct */
+ SAFE_CLOSE_HANDLE(wd->pob->hEvent);
+ AcrFre(wd->pob);
+ wd->pob = 0;
+ }
if (sd != INVALID_SOCKET) {
- wd->fd.u.s = INVALID_SOCKET;
- SAFE_CLOSE_HANDLE(wd->fh);
- wd->fh = 0;
+ fd->s = INVALID_SOCKET;
+ if (wd->localsock) {
+ DeleteFileW(w->localsock);
+ AcrFree(w->localsock);
+ w->localsock = 0;
+ }
if (closesocket(sd) == SOCKET_ERROR)
rc = ACR_GET_NETOS_ERROR();
- wd->fd.u.s = INVALID_SOCKET;
+ fd->s = INVALID_SOCKET;
}
- if (AcrAtomic32Dec(&wd->fd.refs) == 0)
+ if (AcrAtomic32Dec(&fd->refs) == 0)
AcrFree(wd);
return rc;
}
@@ -91,7 +101,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, sh
{
int rc = 0;
SOCKET sd;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (fd == 0)
return ACR_EBADF;
@@ -102,7 +112,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, sh
else
how = SD_BOTH;
sd = _retain_sd(fd);
- if (shutdown(fd->u.s, how) == SOCKET_ERROR)
+ if (shutdown(fd->s, how) == SOCKET_ERROR)
rc = ACR_GET_NETOS_ERROR();
_release_sd(fd);
return rc;
@@ -111,9 +121,9 @@ ACR_NET_EXPORT(jint, LocalDescriptor, sh
ACR_NET_EXPORT(jint, LocalDescriptor, sendz0)(JNI_STDARGS, jlong fp)
{
char dummy = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
- if (send(fd->u.s, &dummy, 0, 0) == SOCKET_ERROR)
+ if (send(fd->s, &dummy, 0, 0) == SOCKET_ERROR)
return ACR_GET_NETOS_ERROR();
else
return 0;
@@ -125,7 +135,7 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
SOCKET sd;
int rc = 0;
int type = 0;
- wls_fd_t *sp;
+ acr_sd_t *sp;
switch (stype) {
case 1:
@@ -153,14 +163,14 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
ACR_THROW_NET_ERROR(rc);
return 0;
}
- if ((sp = ACR_TALLOC(wls_fd_t)) == 0) {
+ if ((sp = ACR_TALLOC(acr_sd_t)) == 0) {
closesocket(sd);
return 0;
}
sp->fd.type = ACR_DT_LSOCK;
sp->fd.timeout = -1;
sp->fd.refs = 1;
- sp->fd.u.s = sd;
+ sp->fd.s = sd;
sp->fh = 0;
if (block == JNI_FALSE) {
sp->fd.flags |= ACR_DT_NONBLOCK;
@@ -172,16 +182,16 @@ ACR_NET_EXPORT(jlong, LocalDescriptor, s
ACR_NET_EXPORT(jint, LocalDescriptor, block0)(JNI_STDARGS, jlong fp, jboolean on)
{
int rc;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (on == JNI_TRUE) {
if ((fd->flags & ACR_DT_NONBLOCK) != 0) {
int zero = 0;
- if ((rc = AcrNonblock(fd->u.s, 0)) != 0)
+ if ((rc = AcrNonblock(fd->s, 0)) != 0)
return rc;
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
fd->timeout = -1;
fd->flags &= ~ACR_DT_NONBLOCK;
@@ -189,7 +199,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, bl
}
else {
if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
- if ((rc = AcrNonblock(fd->u.s, 1)) != 0)
+ if ((rc = AcrNonblock(fd->s, 1)) != 0)
return rc;
if (fd->timeout < 0)
fd->timeout = 0;
@@ -201,7 +211,7 @@ ACR_NET_EXPORT(jint, LocalDescriptor, bl
ACR_NET_EXPORT(jboolean, LocalDescriptor, isBlocking0)(JNI_STDARGS, jlong fp)
{
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if ((fd->flags & ACR_DT_NONBLOCK) == 0)
return JNI_TRUE;
@@ -212,38 +222,38 @@ ACR_NET_EXPORT(jboolean, LocalDescriptor
ACR_NET_EXPORT(jint, LocalDescriptor, tmset0)(JNI_STDARGS, jlong fp, jint timeout)
{
int rc = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (timeout == 0) {
if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
- if ((rc = AcrNonblock(fd->u.s, 1)) != 0)
+ if ((rc = AcrNonblock(fd->s, 1)) != 0)
return rc;
fd->flags |= ACR_DT_NONBLOCK;
}
}
else if (timeout > 0) {
if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
- if ((rc = AcrNonblock(fd->u.s, 1)) != 0)
+ if ((rc = AcrNonblock(fd->s, 1)) != 0)
return rc;
fd->flags |= ACR_DT_NONBLOCK;
}
if (fd->timeout != timeout) {
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&timeout, (socklen_t)sizeof(timeout));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&timeout, (socklen_t)sizeof(timeout));
}
}
else if (timeout < 0) {
int zero = 0;
if ((fd->flags & ACR_DT_NONBLOCK) != 0) {
- if ((rc = AcrNonblock(fd->u.s, 0)) != 0)
+ if ((rc = AcrNonblock(fd->s, 0)) != 0)
return rc;
fd->flags &= ~ACR_DT_NONBLOCK;
}
- setsockopt(fd->u.s, SOL_SOCKET, SO_RCVTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_RCVTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
- setsockopt(fd->u.s, SOL_SOCKET, SO_SNDTIMEO,
+ setsockopt(fd->s, SOL_SOCKET, SO_SNDTIMEO,
(char *)&zero, (socklen_t)sizeof(zero));
}
fd->timeout = timeout;
@@ -262,7 +272,8 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
int sas = ISIZEOF(sa);
int bsz = ISIZEOF(ssbuf);
acr_sockaddr_t *ca = SOCKADDR_CAST(cb);
- wls_fd_t *wd = J2P(fp, wls_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
+
if (AcrReadFileDataA(ca->hostname, ssbuf, &bsz) == 0) {
rc = ACR_GET_OS_ERROR();
@@ -290,9 +301,9 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
if (timeout == 0)
- timeout = wd->fd.timeout;
- sd = _retain_sd((acr_fd_t *)wd);
- if (timeout > 0 && (wd->fd.flags & ACR_DT_NONBLOCK) == 0) {
+ timeout = fd->timeout;
+ sd = _retain_sd(fd);
+ if (timeout > 0 && (fd->flags & ACR_DT_NONBLOCK) == 0) {
/* Turn the socket to non-blocking mode
* for the duration of the connect call.
*/
@@ -315,12 +326,12 @@ ACR_NET_EXPORT(jint, LocalEndpoint, conn
rc = err;
}
}
- if ((wd->fd.type & ACR_DT_NONBLOCK) == 0)
+ if ((fd->type & ACR_DT_NONBLOCK) == 0)
AcrNonblock(sd, 0);
}
}
finally:
- _release_sd((acr_fd_t *)wd);
+ _release_sd(fd);
return rc;
}
@@ -337,7 +348,7 @@ ACR_NET_EXPORT(jint, LocalServerEndpoint
int sas = ISIZEOF(sa);
acr_sockaddr_t *aa = SOCKADDR_CAST(ba);
- wls_fd_t *wd = J2P(fp, wls_fd_t *);
+ acr_sd_t *fd = J2P(fp, wls_sd_t *);
if (MultiByteToWideChar(CP_UTF8, 0, aa->hostname, -1, sname, NI_MAXHOST) == 0) {
rc = GetLastError();
@@ -347,7 +358,7 @@ ACR_NET_EXPORT(jint, LocalServerEndpoint
sfh = CreateFileW(sname, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
GetSaWithNullDacl(env, JNI_FALSE), CREATE_NEW,
- FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_SYSTEM | FILE_FLAG_DELETE_ON_CLOSE,
+ FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_SYSTEM,
0);
if (IS_INVALID_HANDLE(sfh)) {
rc = GetLastError();
@@ -358,11 +369,11 @@ ACR_NET_EXPORT(jint, LocalServerEndpoint
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
- if (bind(wd->fd.u.s, (SOCKADDR *)&sa, sas) == -1) {
+ if (bind(fd->s, (SOCKADDR *)&sa, sas) == -1) {
rc = ACR_GET_NETOS_ERROR();
goto failed;
}
- if (getsockname(wd->fd.u.s, (SOCKADDR *)&sa, &sas) == SOCKET_ERROR) {
+ if (getsockname(fd->s, (SOCKADDR *)&sa, &sas) == SOCKET_ERROR) {
rc = ACR_GET_NETOS_ERROR();
goto failed;
}
@@ -372,12 +383,13 @@ ACR_NET_EXPORT(jint, LocalServerEndpoint
rc = GetLastError();
goto failed;
}
- if (listen(wd->fd.u.s, backlog) == SOCKET_ERROR) {
+ CloseHandle(sfh);
+ if (listen(fd->s, backlog) == SOCKET_ERROR) {
rc = ACR_GET_NETOS_ERROR();
goto failed;
}
SOCKADDR_RELEASE(ba, aa);
- wd->fh = sfh;
+ fd->localsock = wcsdup(name);
return 0;
failed:
@@ -409,19 +421,19 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
acr_sockaddr_t *aa;
struct sockaddr_in sa;
int sas = ISIZEOF(sa);
- wls_fd_t *sp;
- wls_fd_t *wd = J2P(fp, wls_fd_t *);
+ acr_sd_t *sp;
+ acr_sd_t *fd = J2P(fp, wls_sd_t *);
memset(&sa, 0, sizeof(sa));
- ad = _retain_sd((acr_fd_t *)wd);
+ ad = _retain_sd(fd);
sd = accept(ad, 0, 0);
- _release_sd((acr_fd_t *)wd);
+ _release_sd(fd);
if (sd == INVALID_SOCKET) {
ACR_THROW_NET_ERRNO();
return 0;
}
if (block == JNI_FALSE) {
- if ((wd->fd.flags & ACR_DT_NONBLOCK) == 0) {
+ if ((fd->flags & ACR_DT_NONBLOCK) == 0) {
int rc = AcrNonblock(sd, 1);
if (rc != 0) {
closesocket(sd);
@@ -430,7 +442,7 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
}
}
}
- else if ((wd->fd.flags & ACR_DT_NONBLOCK) != 0) {
+ else if ((fd->flags & ACR_DT_NONBLOCK) != 0) {
int rc = AcrNonblock(sd, 0);
if (rc != 0) {
closesocket(sd);
@@ -438,7 +450,7 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
return 0;
}
}
- if ((sp = ACR_TALLOC(wls_fd_t)) == 0) {
+ if ((sp = ACR_TALLOC(acr_sd_t)) == 0) {
closesocket(sd);
return 0;
}
@@ -450,16 +462,15 @@ ACR_NET_EXPORT(jlong, LocalServerEndpoin
}
SOCKADDR_RELEASE(ba, aa);
- sp->fd.type = ACR_DT_LSOCK;
- sp->fd.flags = wd->fd.flags & ~ACR_DT_NONBLOCK;
- sp->fd.timeout = wd->fd.timeout;
- sp->fd.refs = 1;
- sp->fd.u.s = sd;
- sp->fh = 0;
+ sp->type = ACR_DT_LSOCK;
+ sp->flags = fd->flags & ~ACR_DT_NONBLOCK;
+ sp->timeout = fd->timeout;
+ sp->refs = 1;
+ sp->s = sd;
if (block == JNI_FALSE) {
- sp->fd.flags |= ACR_DT_NONBLOCK;
- if (sp->fd.timeout < 0)
- sp->fd.timeout = 0;
+ sp->flags |= ACR_DT_NONBLOCK;
+ if (sp->timeout < 0)
+ sp->timeout = 0;
}
return P2J(sp);
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/poll.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/poll.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/poll.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/poll.c Fri Jul 15 05:39:24 2011
@@ -86,7 +86,7 @@ ACR_NET_EXPORT(jint, Poll, wait0)(JNI_ST
pfdset = JARRAY_CRITICAL(jlong, fdset);
pevents = JARRAY_CRITICAL(jshort, events);
for (i = 0; i < nevents; i++) {
- pfd[i].fd = (J2P(pfdset[i], acr_fd_t *))->u.s;
+ pfd[i].fd = (J2P(pfdset[i], acr_sd_t *))->s;
pfd[i].events = ieventt(pevents[i]);
pfd[i].revents = 0;
}
@@ -133,13 +133,13 @@ ACR_NET_EXPORT(jshort, Poll, wait1)(JNI_
int ns;
struct pollfd pfd;
acr_time_t tmx = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
if (!ACR_HAVE_LATE_DLL_FUNC(WSAPoll)) {
ACR_THROW_NET_ERROR(ACR_ENOTIMPL);
return 0;
}
- pfd.fd = fd->u.s;
+ pfd.fd = fd->s;
pfd.events = ieventt(events);
pfd.revents = 0;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/pollset.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/pollset.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/pollset.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/pollset.c Fri Jul 15 05:39:24 2011
@@ -419,7 +419,7 @@ ACR_NET_EXPORT(jint, PollSelector, add0)
{
int i, rc = 0;
acr_pollset_t *ps = J2P(pollset, acr_pollset_t *);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
EnterCriticalSection(&ps->mutex);
while (!AcrAtomic32Equ(&ps->state, 0)) {
@@ -438,14 +438,14 @@ ACR_NET_EXPORT(jint, PollSelector, add0)
goto cleanup;
}
for (i = 1; i < ps->used; i++) {
- if (ps->fdset[i].fd == fd->u.s) {
+ if (ps->fdset[i].fd == fd->s) {
/* Duplicate descriptor
*/
rc = ACR_EALREADY;
goto cleanup;
}
}
- ps->fdset[ps->used].fd = fd->u.s;
+ ps->fdset[ps->used].fd = fd->s;
ps->fdset[ps->used].events = ieventt(events);
ps->fdset[ps->used].revents = 0;
ps->ooset[ps->used].obj = (*env)->NewGlobalRef(env, fo);
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/selectset.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/selectset.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/selectset.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/selectset.c Fri Jul 15 05:39:24 2011
@@ -256,7 +256,7 @@ ACR_NET_EXPORT(jint, LegacySelector, add
{
int i, rc = 0;
acr_pollset_t *ps = J2P(pollset, acr_pollset_t *);
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
EnterCriticalSection(&ps->mutex);
while (!AcrAtomic32Equ(&ps->state, 0)) {
@@ -275,14 +275,14 @@ ACR_NET_EXPORT(jint, LegacySelector, add
goto cleanup;
}
for (i = 1; i < ps->used; i++) {
- if (ps->ooset[i].sd == fd->u.s) {
+ if (ps->ooset[i].sd == fd->s) {
/* Duplicate descriptor
*/
rc = ACR_EALREADY;
goto cleanup;
}
}
- ps->ooset[ps->used].sd = fd->u.s;
+ ps->ooset[ps->used].sd = fd->s;
ps->ooset[ps->used].ievents = (short)events;
ps->ooset[ps->used].revents = 0;
ps->ooset[ps->used].obj = (*env)->NewGlobalRef(env, fo);
@@ -302,13 +302,13 @@ ACR_NET_EXPORT(jint, LegacySelector, add
ps->ooset[ps->used].exp = ACR_INFINITE;
}
if (events & ACR_OP_INP) {
- FD_SET(fd->u.s, &ps->rdset);
+ FD_SET(fd->s, &ps->rdset);
}
if (events & ACR_OP_OUT) {
- FD_SET(fd->u.s, &ps->wrset);
+ FD_SET(fd->s, &ps->wrset);
}
if (events & 0xFFF0) {
- FD_SET(fd->u.s, &ps->exset);
+ FD_SET(fd->s, &ps->exset);
}
ps->used++;
cleanup:
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/descriptor.c Fri Jul 15 05:39:24 2011
@@ -69,7 +69,12 @@ ACR_IO_EXPORT(jboolean, Descriptor, rele
* before the release. In that case check if the
* descriptor was closed and if not throw an exception.
*/
- if (fd->u.f == -1 || fd->u.nh == 0) {
+#if defined(WINDOWS)
+ if (fd->s == INVALID_SOCKET || IS_INVALID_HANDLE(fd->h)) {
+#else
+ if (fd->f == -1)
+#endif
+ {
/* Descriptor was closed.
*/
AcrFree(fd);
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/netaddr.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/netaddr.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/netaddr.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/netaddr.c Fri Jul 15 05:39:24 2011
@@ -409,10 +409,10 @@ sockaddr_to_ipstr(char *buf, int buflen,
}
int
-AcrGetLocalAddr(acr_fd_t *sockfd, acr_sockaddr_t *sockaddr)
+AcrGetLocalAddr(acr_sd_t *sockfd, acr_sockaddr_t *sockaddr)
{
socklen_t salen = sizeof(sockaddr->sa);
- if (getsockname(sockfd->u.s, (struct sockaddr *)&sockaddr->sa, &salen) == SOCKET_ERROR) {
+ if (getsockname(sockfd->s, (struct sockaddr *)&sockaddr->sa, &salen) == SOCKET_ERROR) {
return ACR_GET_NETOS_ERROR();
}
else {
@@ -423,10 +423,10 @@ AcrGetLocalAddr(acr_fd_t *sockfd, acr_so
}
int
-AcrGetRemoteAddr(acr_fd_t *sockfd, acr_sockaddr_t *sockaddr)
+AcrGetRemoteAddr(acr_sd_t *sockfd, acr_sockaddr_t *sockaddr)
{
socklen_t salen = sizeof(sockaddr->sa);
- if (getpeername(sockfd->u.s, (struct sockaddr *)&sockaddr->sa, &salen) == SOCKET_ERROR) {
+ if (getpeername(sockfd->s, (struct sockaddr *)&sockaddr->sa, &salen) == SOCKET_ERROR) {
return ACR_GET_NETOS_ERROR();
}
else {
@@ -460,10 +460,15 @@ sockaddr_vars_set(acr_sockaddr_t *addr,
#if HAVE_SYS_UN_H
else if (family == AF_LOCAL) {
addr->salen = ISIZEOF(struct sockaddr_un);
- addr->addrlen = ISIZEOF(addr->sa.unx.sun_path);;
+ addr->addrlen = ISIZEOF(addr->sa.unx.sun_path);
addr->iplen = addr->addrlen;
}
#endif
+ else {
+ addr->salen = 0;
+ addr->addrlen = 0;
+ addr->iplen = 0;
+ }
}
static int
@@ -590,7 +595,6 @@ find_addresses(acr_sockaddr_t **sa, cons
return call_resolver(sa, hostname, servname, family, port);
}
-#define GETHOSTBYNAME_BUFLEN 512
static int
get_hostname(const char **hostname, acr_sockaddr_t *sockaddr, int flags)
{
@@ -685,9 +689,9 @@ get_servname(const char **servname, acr_
}
else if (sockaddr->family == AF_UNIX) {
#if defined(WINDOWS)
- *servname = "pipe";
-#else
*servname = "socket";
+#else
+ *servname = "unixsocket";
#endif
return 0;
}
@@ -898,8 +902,15 @@ ACR_NET_EXPORT(jstring, SocketAddress, h
acr_sockaddr_t *sa = SOCKADDR_CAST(a);
if (sa != 0) {
- if (sa->hostname[0] != '\0')
+ if (sa->hostname[0] != '\0') {
+#if defined(WINDOWS)
+ if (sa->family == AF_LOCAL)
+ rv = AcrNewJavaStringU(env, sa->hostname);
+ else
+#else
rv = AcrNewJavaStringA(env, sa->hostname);
+#endif
+ }
else {
char buf[256];
if (sockaddr_to_ipstr(buf, 256, sa) == 0)
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/select.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/select.c?rev=1146963&r1=1146962&r2=1146963&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/select.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/select.c Fri Jul 15 05:39:24 2011
@@ -28,12 +28,14 @@ ACR_NET_EXPORT(jint, Select, wait0)(JNI_
jint nevents, jint timeout)
{
int ns, i;
- int nmax = -1;
#if !defined(WINDOWS)
acr_time_t tmx = 0;
+ int nmax = -1;
+#else
+ int nmax = FD_SETSIZE;
#endif
acr_time_t tmo = 0;
- acr_fd_t *fd;
+ acr_sd_t *fd;
struct timeval tv = { 0, 0 };
struct timeval *tp = 0;
fd_set rdset, wrset, exset;
@@ -53,9 +55,9 @@ ACR_NET_EXPORT(jint, Select, wait0)(JNI_
pfdset = JARRAY_CRITICAL(jlong, fdset);
pevents = JARRAY_CRITICAL(jshort, events);
for (i = 0; i < nevents; i++) {
- fd = J2P(pfdset[i], acr_fd_t *);
+ fd = J2P(pfdset[i], acr_sd_t *);
#if defined(FD_SETSIZE) && !defined(WINDOWS)
- if (fd->u.s > FD_SETSIZE) {
+ if (fd->s > FD_SETSIZE) {
RELEASE_CRITICAL(events, pevents);
RELEASE_CRITICAL(fdset, pfdset);
ACR_THROW_NET_ERROR(ACR_ERANGE);
@@ -63,16 +65,18 @@ ACR_NET_EXPORT(jint, Select, wait0)(JNI_
}
#endif
if (pevents[i] & ACR_OP_INP) {
- FD_SET(fd->u.s, &rdset);
+ FD_SET(fd->s, &rdset);
}
if (pevents[i] & ACR_OP_OUT) {
- FD_SET(fd->u.s, &wrset);
+ FD_SET(fd->s, &wrset);
}
if (pevents[i] & ~(ACR_OP_INP | ACR_OP_OUT)) {
- FD_SET(fd->u.s, &exset);
+ FD_SET(fd->s, &exset);
}
- if (fd->u.f > nmax)
- nmax = fd->u.f;
+#if !defined(WINDOWS)
+ if (fd->s > nmax)
+ nmax = fd->s;
+#endif
}
RELEASE_CRITICAL(events, pevents);
if (timeout >= 0) {
@@ -116,8 +120,8 @@ ACR_NET_EXPORT(jint, Select, wait0)(JNI_
ns = 0;
pevents = JARRAY_CRITICAL(jshort, revents);
for (i = 0; i < nevents; i++) {
- fd = J2P(pfdset[i], acr_fd_t *);
- if (getsockopt(fd->u.s, SOL_SOCKET, SO_TYPE, (char *)&optval, &optlen) == -1) {
+ fd = J2P(pfdset[i], acr_sd_t *);
+ if (getsockopt(fd->s, SOL_SOCKET, SO_TYPE, (char *)&optval, &optlen) == -1) {
if (WSAGetLastError() == WSAENOTSOCK) {
pevents[i] = ACR_OP_ERROR | ACR_OP_NVAL;
ns++;
@@ -137,15 +141,15 @@ ACR_NET_EXPORT(jint, Select, wait0)(JNI_
}
pevents = JARRAY_CRITICAL(jshort, revents);
for (i = 0; i < nevents; i++) {
- fd = J2P(pfdset[i], acr_fd_t *);
+ fd = J2P(pfdset[i], acr_sd_t *);
pevents[i] = 0;
- if (FD_ISSET(fd->u.s, &rdset)) {
+ if (FD_ISSET(fd->s, &rdset)) {
pevents[i] |= ACR_OP_INP;
}
- if (FD_ISSET(fd->u.s, &wrset)) {
+ if (FD_ISSET(fd->s, &wrset)) {
pevents[i] |= ACR_OP_OUT;
}
- if (FD_ISSET(fd->u.s, &exset)) {
+ if (FD_ISSET(fd->s, &exset)) {
pevents[i] |= ACR_OP_ERROR;
}
}
@@ -162,7 +166,7 @@ ACR_NET_EXPORT(jshort, Select, wait1)(JN
acr_time_t tmx = 0;
#endif
acr_time_t tmo = 0;
- acr_fd_t *fd = J2P(fp, acr_fd_t *);
+ acr_sd_t *fd = J2P(fp, acr_sd_t *);
struct timeval tv;
struct timeval *tp = 0;
fd_set rdset, wrset, exset;
@@ -172,13 +176,13 @@ ACR_NET_EXPORT(jshort, Select, wait1)(JN
FD_ZERO(&exset);
if (events & ACR_OP_INP) {
- FD_SET(fd->u.s, &rdset);
+ FD_SET(fd->s, &rdset);
}
if (events & ACR_OP_OUT) {
- FD_SET(fd->u.s, &wrset);
+ FD_SET(fd->s, &wrset);
}
if (events & ~(ACR_OP_INP | ACR_OP_OUT)) {
- FD_SET(fd->u.s, &exset);
+ FD_SET(fd->s, &exset);
}
if (timeout >= 0) {
tmo = AcrTimeFromMsec(timeout);
@@ -192,7 +196,7 @@ ACR_NET_EXPORT(jshort, Select, wait1)(JN
tp->tv_sec = (long)AcrTimeSec(tmo);
tp->tv_usec = (long)AcrTimeUsec(tmo);
}
- ns = select(fd->u.f + 1, &rdset, &wrset, &exset, tp);
+ ns = select((int)(fd->s) + 1, &rdset, &wrset, &exset, tp);
#if !defined(WINDOWS)
if (ns == -1 && errno == EINTR) {
if (tmo >= 0) {
@@ -214,7 +218,7 @@ ACR_NET_EXPORT(jshort, Select, wait1)(JN
int optval;
int optlen = ISIZEOF(optval);
- if (getsockopt(fd->u.s, SOL_SOCKET, SO_TYPE, (char *)&optval, &optlen) == -1) {
+ if (getsockopt(fd->s, SOL_SOCKET, SO_TYPE, (char *)&optval, &optlen) == -1) {
if (WSAGetLastError() == WSAENOTSOCK)
return ACR_OP_ERROR | ACR_OP_NVAL;
}
@@ -225,13 +229,13 @@ ACR_NET_EXPORT(jshort, Select, wait1)(JN
}
else {
jshort rv = 0;
- if (FD_ISSET(fd->u.s, &rdset)) {
+ if (FD_ISSET(fd->s, &rdset)) {
rv |= ACR_OP_INP;
}
- if (FD_ISSET(fd->u.s, &wrset)) {
+ if (FD_ISSET(fd->s, &wrset)) {
rv |= ACR_OP_OUT;
}
- if (FD_ISSET(fd->u.s, &exset)) {
+ if (FD_ISSET(fd->s, &exset)) {
rv |= ACR_OP_ERROR;
}
return rv;