【发布时间】:2015-02-19 06:37:29
【问题描述】:
我创建了一个抽象套接字。
#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
有人能告诉我这个“没有这样的文件或目录”的原因吗?我怎样才能从外部删除/取消链接这个抽象套接字?有没有什么方法?
【问题讨论】:
-
检查 /tmp/xyz,不带 @,并显示调用 socket() 函数的代码
-
我试过 /tmp/xyz 并且消息是一样的,我的 socket() 函数 sn-p: int sockfd = -1;国际化; struct sockaddr_un 地址;整数结果; sockfd = 套接字(AF_UNIX,SOCK_STREAM,0); if(sockfd
-
有些东西没有加起来。服务器套接字在哪里?
listen在哪里?bind在哪里?您的套接字连接到什么? -
无论如何,抽象套接字与文件系统没有任何关联(这就是它们抽象的原因)。你不能用文件系统操作来操作它们。
标签: linux sockets network-programming