connect() не подключается

Рейтинг: 0Ответов: 0Опубликовано: 03.03.2023

Пишу клиент-серверную модель в рамках UNIX и возникла проблема с тем, что вызов connect() к клиенте стабильно завершается неудачей.

Сервер:

#define ADDRESS "mysocket" // адрес для связи

int main ()
{
char c;
int i, d, d1, len, ca_len;
FILE * fp;
struct sockaddr_un sa, ca;

if((d = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) {
    perror ("client: socket");
    exit(1);
}
sa.sun_family = AF_UNIX;
strcpy (sa.sun_path, ADDRESS);
unlink (ADDRESS);
len = sizeof ( sa.sun_family) + strlen (sa.sun_path);
if ( bind ( d, (struct sockaddr *)&sa, sizeof(sa)) < 0 ) {
    perror ("server: bind");
    exit (1);
}

if ( listen ( d, 5) < 0 ) {
    perror ("server: listen");
    exit (1);
}

ca_len = sizeof ca;
if (( d1 = accept(d, (struct sockaddr*)&ca, (socklen_t*)&ca_len)) < 0 ) {
    perror ("server: accept");
    exit (1);
}

fp = fdopen (d1, "r");
c = fgetc (fp);
send (d1, "server", 7, 0);
putchar ( c );
close (d1);
exit (0);

}

Основные моменты клиентской части:

#define ADDRESS "mysocket" // адрес для связи

int main ()
{
    char c;
    int i, s, len;
    FILE *fp;
    struct sockaddr_un sa;

    if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0){
        perror ("client: socket");
        exit (1);
    }

    sa.sun_family = AF_UNIX;
    strcpy (sa.sun_path, ADDRESS);

    len = sizeof ( sa.sun_family) + strlen ( sa.sun_path);
    if ( connect ( s, (struct sockaddr *)&sa, sizeof(sa)) < 0 ){
        perror ("client: connect");
        exit (1);
    }
/*--------------------------------------------- */
// читаем сообщения сервера, пишем серверу:
    fp = fdopen (s, "r");
    c = fgetc (fp);
/* ............................ */
    send (s, "client", 7, 0);
    close (s);
    exit (0);
}

Подскажите, пожалуйста, в чём моя ошибка и почему так происходит? Пробовал перезагружать систему (на случай, если у ОС забились сокеты и проч) - не помогает.

Ответы

Ответов пока нет.