Salve a tutti ragazzi, sto scrivendo un programma di prova per vedere se ho capito come funzionano i socket.
Semplicemente crea un processo figlio(client) che scrive al padre un messaggio, che viene stampato, e a cui
segue una risposta al figlio.
Il problema è che quando vado a compilare il terminale mi dice che non conosce la dimensione della struttura
dell'indirizzo UNIX.
provasock.c: In function ‘main’:
provasock.c:25:21: error: storage size of ‘sa’ isn’t known
struct sockadrr_un sa;
^~
provasock.c:25:21: warning: unused variable ‘sa’ [-Wunused-variable]
Non capisco il motivo dell'errore, qualcuno mi potrebbe dare una mano?
Vi posto il mio codice
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<sys/un.h>
#define ec_meno1(S,R) \
if((S)==-1) { perror(R); exit(EXIT_FAILURE); }
#define MAXLEN 100
#define UNIX_PATH_MAX 108
#define SOCKNAME "./mysock"
int main(){
int sfd, sfd_c, pid;
char buffer[MAXLEN];
struct sockadrr_un sa;
strncpy(sa.sun_path, SOCKNAME, UNIX_PATH_MAX);
sa.sun_family=AF_UNIX;
ec_meno1((pid=fork()),("fork"));
if(pid==0){
printf("%d : figlio di %d\n", getpid(), getppid());
ec_meno1((sfd=socket(AF_UNIX, SOCK_STREAM, 0)),("socket c"));
while( (connect(sfd, (struct sockaddr *) &sa, sizeof(sa)))==-1 ){
if( errno==ENOENT )
sleep(1);
else exit(EXIT_FAILURE);
}
ec_meno1((write(sfd, "ciaooooo", MAXLEN)),("write c"));
ec_meno1((read(sfd, buffer, MAXLEN)),("read c"));
printf("%d : client got %s\n", getpid(), buffer);
close(sfd);
exit(56);
}
printf("%d : Padre\n", getpid());
ec_meno1((sfd=socket(AF_UNIX, SOCK_STREAM, 0)),("socket"));
ec_meno1((bind(sfd, (struct sockadrr *) &sa, sizeof(sa))),("bind"));
ec_meno1((listen(sfd, SOMAXCONN)),("listen"));
ec_meno1((sfd_c=accept(sfd, NULL, 0)),("accept"));
ec_meno1((read(sfd_c, buffer, MAXLEN)),("read server"));
printf("%d : server got %s\n", getpid(), buffer);
ec_meno1((write(sfd_c, "Bye!", MAXLEN)),("write server"));
close(sfd_c);
close(sfd);
}