Errore a compilazione: storage size isn't know

di il
2 risposte

Errore a compilazione: storage size isn't know

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);
	
	} 

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte