bonjour,

je me trouve confronté à un problème que je trouve bête mais n'arrive pas à le résoudre.

Sous linux, je peux faire quelque chose du genre pour attribuer une addresse IP au champ de la structure sockaddr_in

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
const char* ip = "192.168.1.10";
struct sockaddr_in addr;
memset(&addr, 0, sizeof(struct sockaddr_in));
addr.sin_addr.s_addr = inet_addr(ip);
ceci fonctionne parfaitement sous linux mais sous windows cela ne fonctionne pas. En regardant dans le winsock.h, voici ce que l'on trouve.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
typedef struct sockaddr_in SOCKADDR_IN;
Rien de bien grave ici.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
struct sockaddr_in {
	short	sin_family;
	u_short	sin_port;
	struct	in_addr sin_addr;
	char	sin_zero[8];
};
Rien de bien méchant ici non plus. Mais si on regarde la structure in_addr, c'est ici que ça se complique.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
struct in_addr {
	union {
		struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
		struct { u_short s_w1,s_w2; } S_un_w;
		u_long S_addr;
	} S_un;
J'ai essayé les 3 possibilités mais sans succès. au moment du bind j'ai une erreur. La seule qui fonctionne c'est si je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
SOCKADDR_IN addr;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
Avec cette dernière méthode, ceci fonctionne mais impossible de trouver comment convertir mon const char* ip = "192.168.1.10"; pour pouvoir le mettre dans le champs d'adresse de la structure SOCKADDR_IN.

merci de votre précieuse aide