因此,我正在使用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完成的。我已经通过调试验证了accept正在挂起,套接字正在监听等。我还验证了它们永远不会停止阻塞。此外,我进行写操作,然后尝试阅读时,得到一个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

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

最佳答案

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

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

10-11 22:35
查看更多