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;