我可以删除抽象套接字路径吗?

时间:2015-02-19 06:37:30

标签: linux sockets network-programming

我创建了一个抽象套接字。

#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;以及如何从外部删除/取消链接此抽象套接字?有没有方法?

1 个答案:

答案 0 :(得分:0)

抽象套接字与文件系统路径名无关(请参阅unix(7)),因此您无法使用unlink()。

当没有进程使用它时,内核应该自动删除抽象套接字,所以去除&#34;删除&#34;它应该关闭所有引用套接字的服务器和客户端描述符,或者只是终止所有服务器和客户端进程。