Programmation réseaux Erreur Bind: Address family not supported

Résolu/Fermé
Signaler
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
-
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
-
Bonjour,
Je viens poster ce message parce qu'il me semble que j'ai fait une erreur mais laquelle je ne sais pas.
J'obtiens le message suivant

Erreur Bind: Address family not supported by protocol
Et même après plusieurs vérifications si je suis en IPv6 ou iPv4 pareils rien à faire je vous poste certaines portions de mon code s'il y a des experts qui peuvent m'aider merci d'avance
à bientôt.

#define D_NULL	0
#define D_ERROR    -1
#define D_LOG	        50
#define D_PORT      4102


/***
*	Fonction configuration
*	& préparation de la
*	socket elle renvoie
*	(-1) en cas d'erreur
*	(i_Sock) si tout vas bien 
***/
int f_InitSrv( struct sockaddr_in sin ){

	int i_Sock = D_NULL;
	i_Sock = socket( AF_INET, SOCK_STREAM, D_NULL );
	if( i_Sock <= D_ERROR )
		return (D_ERROR); 
		
	/*	Config Sin	*/
	bzero( &sin, sizeof(sin) );
	sin.sin_family = AF_INET;
	sin.sin_port = htons( D_PORT );
	sin.sin_addr.s_addr = ntohs(INADDR_ANY);
	
	return (i_Sock);
}


/!\ C'est la que ça coince
/*	Config Bind	*/
	int i_Bind = D_NULL;
	i_Bind = bind( ret , (struct sockaddr *)&sin, sizeof(struct sockaddr_in) );
	if( i_Bind <= D_ERROR ){
		perror("Erreur Bind");
		exit(2);
	}

1 réponse

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Bonjour,

Tu veux le faire en IPv6 ou en IPv4 ?
Car en IPv6, ce ne sont pas les mêmes structures à utiliser.
Il faut : sockaddr_in6 au lieu de sockaddr_in et pas mal d'autres choses à adapter.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41989 internautes nous ont dit merci ce mois-ci

Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
Bonsoir
en IPv4 mais le soucis cela m'affiche ce message erreur toujours donc je sais comment le résoudre
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
Bonsoir problème résolu, le soucie était ma structure
sin
qui ne subissait aucune modification du coup ma fonction n'avait aucun effet, fallait que je passe ma structure en pointeur comme ceci
/***	
	*	Vérification config 
	*	Socket IPv4 / IPv6	
	***/
	int ret = f_InitSrv( &sin, &sin6, 0 );


int f_IPv4( struct sockaddr_in *sin ){

	int i_Sock = D_NULL;
	i_Sock = socket( AF_INET, SOCK_STREAM, D_NULL );
	if( i_Sock <= D_ERROR )
		return ( D_ERROR ); 
		
	/*	Config Sin	*/
	bzero(sin, sizeof( *sin ) );
	sin->sin_family = AF_INET;
	sin->sin_port = htons( D_PORT );
	sin->sin_addr.s_addr = ntohs( INADDR_ANY );
	
	return ( i_Sock );
}

Mercis à tous et à bientôt
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 797
Bien vu :-).
Pour info, bzero() est obsolète et non standard. Utilise plutôt memset().
Messages postés
609
Date d'inscription
vendredi 31 juillet 2009
Statut
Membre
Dernière intervention
24 juin 2016
47
Ok , ça marche Merci :)