< prev index next >
src/jdk.net/linux/native/libextnet/LinuxSocketOptions.c
Print this page
*** 21,30 ****
--- 21,32 ----
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include <sys/socket.h>
+ #include <sys/un.h>
+ #include <sys/types.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <jni.h>
*** 109,118 ****
--- 111,146 ----
return socketOptionSupported(SOL_SOCKET, TCP_QUICKACK);
}
/*
* Class: jdk_net_LinuxSocketOptions
+ * Method: getSoPeerCred0
+ * Signature: (I[I)I
+ */
+ JNIEXPORT void JNICALL Java_jdk_net_LinuxSocketOptions_getSoPeerCred0
+ (JNIEnv *env, jclass clazz, jint fd, jintArray result) {
+
+ int rv;
+ struct ucred cred;
+ socklen_t len = sizeof(cred);
+ int *rr = (int *)(*env)->GetIntArrayElements(env, result, NULL);
+
+ if ((rv=getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cred, &len)) < 0) {
+ handleError(env, rv, "get SO_PEERCRED failed");
+ } else {
+ if ((int)cred.uid == -1) {
+ handleError(env, -1, "get SO_PEERCRED failed");
+ } else {
+ rr[0] = cred.uid;
+ rr[1] = cred.gid;
+ }
+ }
+ (*env)->ReleaseIntArrayElements(env, result, rr, 0);
+ }
+
+ /*
+ * Class: jdk_net_LinuxSocketOptions
* Method: keepAliveOptionsSupported0
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL Java_jdk_net_LinuxSocketOptions_keepAliveOptionsSupported0
(JNIEnv *env, jobject unused) {
< prev index next >