【发布时间】:2015-05-22 06:01:24
【问题描述】:
所以,我正在使用 Unix 套接字,它们在一段时间内运行良好。现在,当我连接时,我得到一个ECONNRESET 并且服务器的接受甚至不会停止阻塞。
接受代码:
socklen_t slt = sizeof(sun);
int i = accept(sockfd, (struct sockaddr *)&sun, &slt);
阅读代码:
jbyte* ra = malloc(size);
memset(ra, 0, size);
int i = read(sockfd, ra, size);
还有很多,但这都是通过 JNI 实现的。我已经通过调试验证了接受挂起,套接字正在侦听等。我还验证了它们永远不会停止阻塞。此外,我写了一个,然后当我尝试阅读时,我得到一个ECONNRESET。我的服务器以非特权用户身份运行,而我的客户端以 root 身份运行。
socket文件(s,有两种情况),来自ls -la:
srwxr-xr-x 1 ap_6840 ap_6840 0 May 21 22:52 .api.sock
srwxr-xr-x 1 ap_6840 ap_6840 0 May 21 22:52 .http.sock
所以,它们是创建、侦听等。如果您想要更多代码,请告诉我。
编辑:
连接代码:
struct sockaddr_un sun;
sun.sun_family = AF_UNIX;
strncpy(sun.sun_path, npath, 108);
int i = connect((int)sockfd, (struct sockaddr *)&sun, sizeof(sun));
npath 是我的文件。 整个 C 文件:https://github.com/JavaProphet/Avuna-HTTPD/blob/master/csrc/org_avuna_httpd_util_CLib.c
Java 代码将其绑定在一起:https://github.com/JavaProphet/Avuna-HTTPD/tree/master/src/org/avuna/httpd/util/unixsocket
【问题讨论】:
-
我还验证了它正在连接到正确的文件。
-
您需要提供比这更多的代码。我想看看连接代码和读写代码。目前最明显的结论是你连接到了错误的东西。
-
@EJP 我在帖子中添加了更多代码,并链接到所有代码。
-
没有链接。构成问题一部分的代码必须包含在问题中。
-
内核没有理由阻止任何东西。使用
strace实际验证客户端/服务器代码是否按照您的想法执行。