SOCKADDR_in vs sockaddr_in
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:
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:
typedef struct sockaddr_in SOCKADDR_IN;
Rien de bien grave ici.
Code:
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:
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:
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