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


--
Toute connaissance est une réponse à une question.

1 réponse

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
       
      Bonsoir
      en IPv4 mais le soucis cela m'affiche ce message erreur toujours donc je sais comment le résoudre
      0
    2. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
       
      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
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Bien vu :-).
      Pour info, bzero() est obsolète et non standard. Utilise plutôt memset().
      0
    4. sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   50
       
      Ok , ça marche Merci :)
      0