Unix Socket 返回 ECONNRESET,服务器甚至不接受停止阻塞

Unix Socket returns ECONNRESET, and server doesn't even get accept to stop blocking

本文关键字:不接受 返回 Socket ECONNRESET 服务器 Unix      更新时间:2023-10-16

所以,我正在使用Unix套接字,它们在一段时间内运行良好。现在当我连接时,我得到一个ECONNRESET &服务器的accept甚至不会停止阻塞。接受代码:

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实现的。我已经通过调试验证了accept正在挂起,套接字正在侦听等。我也证实了他们从未停止封锁。此外,我做一个写,然后当我试图读,我得到一个ECONNRESET。我的服务器以非特权用户运行,而我的客户端以root用户运行。

套接字文件(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

问题是我的控制台隐藏在两个父进程下,所以我从来没有看过它。