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/05/02 15:20:32 UTC

svn commit: r1098553 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/net/SocketInstance.java native/shared/psock.c native/shared/ssock.c

Author: mturk
Date: Mon May  2 13:20:32 2011
New Revision: 1098553

URL: http://svn.apache.org/viewvc?rev=1098553&view=rev
Log:
Add native socket descriptor setter

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketInstance.java
    commons/sandbox/runtime/trunk/src/main/native/shared/psock.c
    commons/sandbox/runtime/trunk/src/main/native/shared/ssock.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketInstance.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketInstance.java?rev=1098553&r1=1098552&r2=1098553&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketInstance.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/net/SocketInstance.java Mon May  2 13:20:32 2011
@@ -42,6 +42,8 @@ public final class SocketInstance
     private static native FileDescriptor fd1(ServerSocket s);
     private static native int            nd0(Socket s);
     private static native int            nd1(ServerSocket s);
+    private static native int            sd0(Socket s, int d);
+    private static native int            sd1(ServerSocket s, int d);
     private static native int            nb0(Socket s, boolean on);
     private static native int            nb1(ServerSocket s, boolean on);
 
@@ -77,6 +79,26 @@ public final class SocketInstance
         return nd1(s);
     }
 
+    public static void setNativeDescriptor(Socket s, int desc)
+        throws IllegalArgumentException, IOException
+    {
+        if (s == null)
+            throw new IllegalArgumentException();
+        int rc = sd0(s, desc);
+        if (rc != 0)
+            throw new IOException(Status.describe(rc));
+    }
+
+    public static void setNativeDescriptor(ServerSocket s, int desc)
+        throws IllegalArgumentException, IOException
+    {
+        if (s == null)
+            throw new IllegalArgumentException();
+        int rc = sd1(s, desc);
+        if (rc != 0)
+            throw new IOException(Status.describe(rc));
+    }
+
     public static void configureBlocking(Socket s, boolean on)
         throws IllegalArgumentException, IOException
     {

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/psock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/psock.c?rev=1098553&r1=1098552&r2=1098553&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/psock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/psock.c Mon May  2 13:20:32 2011
@@ -104,6 +104,27 @@ ACR_NET_EXPORT(jint, SocketInstance, nd0
     return -1;
 }
 
+ACR_NET_EXPORT(jint, SocketInstance, sd0)(JNI_STDARGS, jobject sock, jint sd)
+{
+    jobject impl = 0;
+    jobject fd;
+
+    if (J4FLD_OFF(0000) != INVALID_FIELD_OFFSET) {
+        char *oa = *(char **)sock;
+        if (oa != 0)
+            impl = (jobject)(oa + J4FLD_PTR(0000));
+    }
+    else if (CLAZZ_LOADED) {
+        impl = GET_IFIELD_O(0000, sock);
+    }
+    if (impl != 0) {
+        fd = AcrGetSocketImplFd(env, impl);
+        if (fd != 0)
+            return AcrSetFileDescriptorFd(env, fd, sd);
+    }
+    return ACR_EBADF;
+}
+
 ACR_NET_EXPORT(jint, SocketInstance, nb0)(JNI_STDARGS, jobject sock, jboolean on)
 {
     jobject impl = 0;

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/ssock.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/ssock.c?rev=1098553&r1=1098552&r2=1098553&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/ssock.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/ssock.c Mon May  2 13:20:32 2011
@@ -95,6 +95,27 @@ ACR_NET_EXPORT(jint, SocketInstance, nd1
     return -1;
 }
 
+ACR_NET_EXPORT(jint, SocketInstance, sd1)(JNI_STDARGS, jobject sock, jint sd)
+{
+    jobject impl = 0;
+    jobject fd;
+
+    if (J4FLD_OFF(0000) != INVALID_FIELD_OFFSET) {
+        char *oa = *(char **)sock;
+        if (oa != 0)
+            impl = (jobject)(oa + J4FLD_PTR(0000));
+    }
+    else if (CLAZZ_LOADED) {
+        impl = GET_IFIELD_O(0000, sock);
+    }
+    if (impl != 0) {
+        fd = AcrGetSocketImplFd(env, impl);
+        if (fd != 0)
+            return AcrSetFileDescriptorFd(env, fd, sd);
+    }
+    return ACR_EBADF;
+}
+
 ACR_NET_EXPORT(jint, SocketInstance, nb1)(JNI_STDARGS, jobject sock, jboolean on)
 {
     jobject impl = 0;