Sturcture in_addr

Résolu
RME Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
RME Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
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   Statut Membre Dernière intervention  
 
merci pour le tuyau. Effectivement je travaille sur une conversion de SunOs vers Linux.
Bonne journée.
0