Перейти к содержанию
    

взаиомодействие процессов через UNIX сокеты

В целях изучения (периодически поглядывая в книгу Стивенса) сделал простой сервер и клиент, чтобы они общались через unix-sockets.

 

Сервер стартует успешно, файл сокета создается, а клиент ругается. Вот код клиента:

 

// на этот сокет забиндин сервер
#define SOCK_FILE "/tmp/ddns.sock"

int main(void)
{
 int sd;    /* socket descriptor */
 int saddrlen, caddrlen;
 struct sockaddr_un serv_addr, cli_addr;
 ....

 memset(&serv_addr, 0, sizeof serv_addr);
 serv_addr.sun_family = AF_UNIX;
 strcpy(serv_addr.sun_path, SOCK_FILE);
 saddrlen = sizeof serv_addr.sun_family + strlen(serv_addr.sun_path);

 /* create UNIX socket */
 if ( (sd = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0 ) {
    perror("socket() error!");
    exit(EXIT_FAILURE);
 }

 memset(&cli_addr, 0, sizeof cli_addr);
 cli_addr.sun_family = AF_UNIX;
 strcpy(cli_addr.sun_path, "/tmp/cli.XXXXXX");
 mkstemp(cli_addr.sun_path);
 caddrlen = sizeof cli_addr.sun_family + strlen(cli_addr.sun_path);

 if ( bind(sd, (struct sockaddr *)&cli_addr, caddrlen) < 0 ) {
    perror("bind() error");
    exit(EXIT_FAILURE);
 }

 //  здесь возникает ошибка - bind() error: Address already in use
 return 0;
}

 

Что не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Hm-m-m, sorry, ne obratil vnimaniya. Voobsche govorya, ne rabotal ya s AF_UNIX tipom socketov. Odnako takaya oshibka harakterna esli server i klient pitayutsya zabindit'sya na odin i tot zhe socket. V sluchae AF_INET pomogaet ustanovka SO_REUSEADDR optsii na socket. Poprobuyte, mozhet i vam pomozhet.

 

A pochemu bi ne ispol'zovat' AF_INET? V etom sluchae edinstvennoe chto budet nuzhno eto bindit' klientov na lyuboy svobodniy address i obschat'sya s serverom napryamuyu. Odnako dlya etogo dolzhen bit' skompilirovan i skonfigurirovan loopback interface.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...