Programmation réseaux Erreur Bind: Address family not supported

Résolu/Fermé
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 29 juin 2014 à 17:26
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 30 juin 2014 à 23:06
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 juin 2014 à 18:55
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
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
29 juin 2014 à 19:16
Bonsoir
en IPv4 mais le soucis cela m'affiche ce message erreur toujours donc je sais comment le résoudre
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
30 juin 2014 à 22:41
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
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
30 juin 2014 à 22:55
Bien vu :-).
Pour info, bzero() est obsolète et non standard. Utilise plutôt memset().
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
30 juin 2014 à 23:06
Ok , ça marche Merci :)
0