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/06/09 07:54:19 UTC
svn commit: r1133664 - in /commons/sandbox/runtime/trunk/src/main:
java/org/apache/commons/runtime/net/LocalDescriptor.java native/configure
native/os/unix/usock.c native/os/win32/config.hw
Author: mturk
Date: Thu Jun 9 05:54:18 2011
New Revision: 1133664
URL: http://svn.apache.org/viewvc?rev=1133664&view=rev
Log:
Add method for creating non blocking sockets directly.
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalDescriptor.java
commons/sandbox/runtime/trunk/src/main/native/configure
commons/sandbox/runtime/trunk/src/main/native/os/unix/usock.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/config.hw
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalDescriptor.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalDescriptor.java?rev=1133664&r1=1133663&r2=1133664&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalDescriptor.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/LocalDescriptor.java Thu Jun 9 05:54:18 2011
@@ -38,7 +38,7 @@ final class LocalDescriptor extends Desc
{
private static native int close0(int fd);
private static native int sendz0(int fd);
- private static native int socket0(int type)
+ private static native int socket0(int type, boolean blocking)
throws IOException;
private static native int block0(int fd, boolean block);
private static native boolean isBlocking0(int fd)
@@ -58,7 +58,13 @@ final class LocalDescriptor extends Desc
public void create(SocketType type)
throws IOException
{
- this.fd = socket0(type.valueOf());
+ create(type, true);
+ }
+
+ public void create(SocketType type, boolean block)
+ throws IOException
+ {
+ this.fd = socket0(type.valueOf(), block);
}
public boolean isBlocking()
Modified: commons/sandbox/runtime/trunk/src/main/native/configure
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure?rev=1133664&r1=1133663&r2=1133664&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/configure (original)
+++ commons/sandbox/runtime/trunk/src/main/native/configure Thu Jun 9 05:54:18 2011
@@ -1379,6 +1379,7 @@ extern "C" {
#define HAVE_GETSERVBYNAME_R `have_function x getservbyname_r`
#define HAVE_GETIFADDRS `have_function x getifaddrs`
#define HAVE_SOCK_CLOEXEC `have_socket AF_INET 'SOCK_STREAM|SOCK_CLOEXEC' SOCK_CLOEXEC`
+#define HAVE_SOCK_NONBLOCK `have_socket AF_INET 'SOCK_STREAM|SOCK_NONBLOCK' SOCK_NONBLOCK`
#define HAVE_FILE_CLOEXEC `have_defined O_CLOEXEC`
#define HAVE_SO_ACCEPTFILTER `have_defined SO_ACCEPTFILTER`
#define HAVE_TM_TM_GMTOFF `have_strcut_member time 'struct tm' tm_gmtoff`
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/usock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/usock.c?rev=1133664&r1=1133663&r2=1133664&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/usock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/usock.c Thu Jun 9 05:54:18 2011
@@ -50,7 +50,8 @@ ACR_NET_EXPORT(jint, LocalDescriptor, se
return 0;
}
-ACR_NET_EXPORT(jint, LocalDescriptor, socket0)(JNI_STDARGS, jint stype)
+ACR_NET_EXPORT(jint, LocalDescriptor, socket0)(JNI_STDARGS, jint stype,
+ jboolean block)
{
int sd;
int rc = 0;
@@ -68,16 +69,26 @@ ACR_NET_EXPORT(jint, LocalDescriptor, so
break;
}
-#if !HAVE_SOCK_CLOEXEC
- sd = socket(AF_LOCAL, type, 0);
-#else
- sd = socket(AF_LOCAL, type | SOCK_CLOEXEC, 0);
+#if HAVE_SOCK_NONBLOCK
+ if (block == JNI_FALSE)
+ type |= SOCK_NONBLOCK;
+#endif
+#if HAVE_SOCK_CLOEXEC
+ type |= SOCK_CLOEXEC;
#endif
+ sd = socket(AF_LOCAL, type, 0);
if (sd == -1)
rc = errno;
#if !HAVE_SOCK_CLOEXEC
- else {
- rc = AcrCloseOnExec(sd, 1);
+ rc = AcrCloseOnExec(sd, 1);
+ if (rc != 0) {
+ r_close(sd);
+ sd = -1;
+ }
+#endif
+#if !HAVE_SOCK_NONBLOCK
+ if (block == JNI_FALSE && rc == 0) {
+ rc = AcrNonblock(sd, 1);
if (rc != 0) {
r_close(sd);
sd = -1;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/config.hw
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/config.hw?rev=1133664&r1=1133663&r2=1133664&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/config.hw (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/config.hw Thu Jun 9 05:54:18 2011
@@ -117,6 +117,7 @@
#define HAVE_GETSERVBYNAME_R 0
#define HAVE_GETIFADDRS 0
#define HAVE_SOCK_CLOEXEC 0
+#define HAVE_SOCK_NONBLOCK 0
#define HAVE_FILE_CLOEXEC 0
#define HAVE_SO_ACCEPTFILTER 0
#define HAVE_TM_TM_GMTOFF 0