c++ - Unix Socket返回ECONNRESET,服务器甚至没有得到accept来停止阻塞

标签 c++ c linux sockets unix

所以,我正在使用 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 身份运行。

套接字文件(有两种情况),来自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

将其绑定(bind)在一起的 Java 代码:https://github.com/JavaProphet/Avuna-HTTPD/tree/master/src/org/avuna/httpd/util/unixsocket

最佳答案

问题是我的控制台被埋在 2 个父进程下,所以我从来没有看过它。我在我的接受方法中调用了堆栈内存上的空闲。

关于c++ - Unix Socket返回ECONNRESET,服务器甚至没有得到accept来停止阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30389388/

相关文章:

python - 是否有 C++11 等同于 Python 的 @property 装饰器?

c++ - 以两种不同的方式在 C++ 中添加两个矩阵

python - Python 内部是如何存储日期时间的?

c - 在程序运行时分配内存

C 程序 : Can anyone explain the program ? [循环变量概念]

在文件范围内使用具有副作用的 C++ 函数,访问单例

c++ - 交换基本类型的对象会抛出异常吗?

linux - 如何在Linux中制作事件的sudo

r - 如何告诉Anaconda使用系统的RStudio?

java - Linux 中 SOAP 请求的请求 xml 中的 UTF-8 编码