我创建了一个抽象套接字。
#define SOCKET_PATH @/tmp/xyz /*in server code of socket_server.c*/
int sockfd = -1;
int len;
struct sockaddr_un address;
int result;
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if(sockfd < -1) {
perror("socket:");
}
memset(&address, 0, sizeof(address));
address.sun_family = AF_UNIX;
strcpy(address.sun_path, SOCKET_PATH);
address.sun_path[0]='\0';
len = sizeof(address);
result = connect(sockfd, (struct sockaddr*)&address, len);
成功创建抽象套接字
sh-3.2# netstat -a | grep xyz
unix 2 [ ACC ] STREAM LISTENING 11132 @/tmp/xyz
现在我使用相同的文件路径来取消套接字链接。
#include<stdio.h>
#define SOCKET_PATH "@/tmp/xyz"
int main()
{
int ret;
ret = unlink(SOCKET_PATH);
if(ret == -1)
perror("unlink::");
return 0;
}
但是当我运行我的取消链接代码时,我收到消息:
sh-3.2# ./ulink
unlink::: No such file or directory
有人可以告诉我这个的原因&#34;没有这样的文件或目录&#34;以及如何从外部删除/取消链接此抽象套接字?有没有方法?
答案 0 :(得分:0)
抽象套接字与文件系统路径名无关(请参阅unix(7)),因此您无法使用unlink()。
当没有进程使用它时,内核应该自动删除抽象套接字,所以去除&#34;删除&#34;它应该关闭所有引用套接字的服务器和客户端描述符,或者只是终止所有服务器和客户端进程。