Я создал абстрактный сокет.Могу ли я удалить абстрактный путь сокета?
#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, withuot @ и показать код, в котором вы вызываете функцию socket() – Darek
Я попытался/tmp/xyz, и сообщение такое же, и мой снимок функции socket(): int sockfd = -1 ; int len; Адрес структуры sockaddr_un; int result; sockfd = socket (AF_UNIX, SOCK_STREAM, 0); if (sockfd <-1) { perror ("socket:"); } memset (& address, 0, sizeof (адрес)); address.sun_family = AF_UNIX; strcpy (адрес.sun_path, SOCKET_PATH); адрес.sun_path [0] = '\ 0'; len = sizeof (адрес); result = connect (sockfd, (struct sockaddr *) & address, len); – Saturn
Что-то не складывается. Где находится серверный сокет? Где «слушать»? Где «связывать»? С чем связана ваша розетка? –