Сервер стартует успешно, файл сокета создается, а клиент ругается. Вот код клиента:
Код
// на этот сокет забиндин сервер
#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;
}
#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;
}
Что не так?