Programmation réseaux Erreur Bind: Address family not supported

Résolu
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   -  
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   49
 
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   Statut Membre Dernière intervention   49
 
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   Statut Contributeur Dernière intervention   1 846
 
Bien vu :-).
Pour info, bzero() est obsolète et non standard. Utilise plutôt memset().
0
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Ok , ça marche Merci :)
0