Fix unix socket problems
diff --git a/jtux_network.c b/jtux_network.c
index d1980b7..2296577 100755
--- a/jtux_network.c
+++ b/jtux_network.c
@@ -110,6 +110,7 @@
{
jclass cls_s_sockaddr_in = (*env)->FindClass(env, "jtux/UNetwork$s_sockaddr_in");
jclass cls_s_sockaddr_in6 = (*env)->FindClass(env, "jtux/UNetwork$s_sockaddr_in6");
+ jclass cls_s_sockaddr_un = (*env)->FindClass(env, "jtux/UNetwork$s_sockaddr_un");
jclass cls_s_in_addr = (*env)->FindClass(env, "jtux/UNetwork$s_in_addr");
jclass cls_s_in6_addr = (*env)->FindClass(env, "jtux/UNetwork$s_in6_addr");
@@ -181,6 +182,22 @@
return false;
}
break;
+ case AF_UNIX: {
+ struct sockaddr_un *saddr = (struct sockaddr_un *)sa_c;
+ jmethodID mid;
+
+ if (*sa == NULL) {
+ if ((mid = (*env)->GetMethodID(env, cls_s_sockaddr_un, "<init>", "()V")) == NULL)
+ return false;
+ if ((*sa = (*env)->NewObject(env, cls_s_sockaddr_un, mid)) == NULL)
+ return false;
+ }
+ if (!field_ctoj_int(env, cls_s_sockaddr_un, "sun_family", *sa, saddr->sun_family))
+ return false;
+ if (!field_ctoj_string(env, cls_s_sockaddr_un, "sun_path", *sa, saddr->sun_path))
+ return false;
+ }
+ break;
default:
return false; // ??? can't deal with it
}
@@ -193,13 +210,19 @@
int fd;
struct sockaddr_storage sa_c;
socklen_t sa_len_c;
-
- JTHROW_neg1(fd = accept(socket_fd, (struct sockaddr *)&sa_c, &sa_len_c))
- if (fd != -1) {
- if (!sockaddr_ctoj(env, &sa, (struct sockaddr *)&sa_c))
- return -1;
- if (!set_IntHolder_int(env, sa_len, sa_len_c))
- return -1;
+ if(sa==NULL)
+ {
+ JTHROW_neg1(fd = accept(socket_fd, NULL, 0))
+ }
+ else
+ {
+ JTHROW_neg1(fd = accept(socket_fd, (struct sockaddr *)&sa_c, &sa_len_c))
+ if (fd != -1) {
+ if (!sockaddr_ctoj(env, &sa, (struct sockaddr *)&sa_c))
+ return -1;
+ if (!set_IntHolder_int(env, sa_len, sa_len_c))
+ return -1;
+ }
}
return fd;
}