connect() не подключается
Пишу клиент-серверную модель в рамках 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);
}
Подскажите, пожалуйста, в чём моя ошибка и почему так происходит? Пробовал перезагружать систему (на случай, если у ОС забились сокеты и проч) - не помогает.
Источник: Stack Overflow на русском