реклама на сайте
подробности

 
 
> взаиомодействие процессов через UNIX сокеты
romez777
сообщение Jul 19 2005, 10:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



В целях изучения (периодически поглядывая в книгу Стивенса) сделал простой сервер и клиент, чтобы они общались через 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;
}


Что не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
v_mirgorodsky
сообщение Jul 19 2005, 11:06
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



Klient dolzhen vizivat' connect(), a ne bind().


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post
romez777
сообщение Jul 20 2005, 00:40
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 292
Регистрация: 9-11-04
Пользователь №: 1 077



Цитата(v_mirgorodsky @ Jul 19 2005, 14:06)
Klient dolzhen vizivat' connect(), a ne bind().
*


я использую unix datagram сокеты.
Go to the top of the page
 
+Quote Post
v_mirgorodsky
сообщение Jul 20 2005, 09:11
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 342
Регистрация: 21-02-05
Пользователь №: 2 804



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.


--------------------
WBR,
V. Mirgorodsky
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 09:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016