romez777 0 19 июля, 2005 Опубликовано 19 июля, 2005 · Жалоба В целях изучения (периодически поглядывая в книгу Стивенса) сделал простой сервер и клиент, чтобы они общались через 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 0 19 июля, 2005 Опубликовано 19 июля, 2005 · Жалоба Klient dolzhen vizivat' connect(), a ne bind(). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
romez777 0 20 июля, 2005 Опубликовано 20 июля, 2005 · Жалоба Klient dolzhen vizivat' connect(), a ne bind(). <{POST_SNAPBACK}> я использую unix datagram сокеты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_mirgorodsky 0 20 июля, 2005 Опубликовано 20 июля, 2005 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться