Привет, я пытаюсь создать простую программу, которая вилки, а затем должна действовать как клиент/сервер. Вот мой код:Соединение отказало программированию сокета в C AF_UNIX
int main(){
int sfd,fdc;
struct sockaddr_un sa;
strncpy(sa.sun_path,SOCKNAME,UNIX_PATH_MAX);
sa.sun_family = AF_UNIX;
char buf[N+1];
if (fork() != 0){
sfd = socket(AF_UNIX,SOCK_STREAM,0);
bind (sfd, (struct sockaddr *) &sa ,sizeof(sa));
listen(sfd, SOMAXCONN);
fdc= accept(sfd,NULL,0);
read(fdc,buf,N);
printf("Server got: %s\n",buf);
write(fdc,"bye!",5);
close(fdc);
close(sfd);
exit(EXIT_SUCCESS);
}
else {
sfd = socket(AF_UNIX,SOCK_STREAM,0);
while(connect(sfd, (struct sockaddr *)&sa,sizeof(sa)) == -1){
if (errno == ENOENT){
printf("Aspetto 1 sec\n");
sleep(1);
}
else {perror(NULL); exit(EXIT_FAILURE) ;}
}
write(sfd,"Hallo!",7);
read(sfd,buf,N);
printf("Client got: %s\n",buf);
close(sfd);
exit(EXIT_SUCCESS);
}
Я не понимаю, почему это происходит, когда я пытаюсь подключить клиента к серверу. Я получил эту ошибку: Connection Refused. Я не могу найти, где проблема, спасибо за вашу помощь.
Похоже, ваша первая проблема может быть состояние гонки. Есть ли причина думать, что клиент не пытается подключиться до того, как сервер прослушивает? – antron
Я думаю, что я понял, в чем проблема: я создаю сокет, когда программа запускается, но потом я не исключаю его, поэтому у меня есть файл под названием mysock и не запускает мою программу. Если я удалю его вручную, код будет работать отлично ... один раз ... как я могу решить это сейчас? – Levenlol