Sturcture in_addr

Résolu/Fermé
RME Messages postés 9 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 12 novembre 2013 - 11 nov. 2013 à 10:40
RME Messages postés 9 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 12 novembre 2013 - 11 nov. 2013 à 15:40
Bonjour,

En unix la structure in_addr a la configuration suivante

typedef 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
} IN_ADDR;

Lorsque je compile avec gcc sous Ubuntu, j'obtiens une erreur : in_addr has no member named S_un.
La structure a-t-elle changé de format ?

Quelqu'un a-t-il une réponse à ce problème.

Merci d'avance

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 11/11/2013 à 12:33
Salut, un petit tout sur LXR et on apprends que
in_addr
n'existe que depuis Linux 3.7 et est définie par
struct in_addr {

__be32 s_addr;
};
__be32
est l'équivalent de
unsigned int32_t
, utilisé pour les addresses IPv4.
La définition que du donnes vient de chez Microsoft (winsock) ou de chez d'autres UNIX propriétaires (OpenVMS d'HP) et ils ne respectent pas le standard BSD 4.3 (que Linux suit) qui définit
in_addr
comme ci-dessus.
T'es donc mal parti. Quand on code pour Linux, on code pour Linux, pas pour Windows. Un coup de
man inet_addr
t'en dira grand sur comment utiliser ces fonctions et structures.
from human import idiocy
del idiocy
1
RME Messages postés 9 Date d'inscription vendredi 9 janvier 2009 Statut Membre Dernière intervention 12 novembre 2013
11 nov. 2013 à 15:40
merci pour le tuyau. Effectivement je travaille sur une conversion de SunOs vers Linux.
Bonne journée.
0