Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: взаиомодействие процессов через UNIX сокеты
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
romez777
В целях изучения (периодически поглядывая в книгу Стивенса) сделал простой сервер и клиент, чтобы они общались через 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;
}


Что не так?
v_mirgorodsky
Klient dolzhen vizivat' connect(), a ne bind().
romez777
Цитата(v_mirgorodsky @ Jul 19 2005, 14:06)
Klient dolzhen vizivat' connect(), a ne bind().
*


я использую unix datagram сокеты.
v_mirgorodsky
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.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.