Toon posts:

[C + Networking] Verschil tussen sockaddr_in gebruik

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allen,

Ik liep vandaag tegen een issue aan, waarbij ik even niet het verschil kon bedenken (en vinden) tussen het gebruik van de volgende constructies binnen SOCKADDR_IN (windows platform).

Zie hieronder de twee verschillen:

code:
1
2
3
4
5
SOCKADDR_IN  theAddress

theAddress.sin_addr.S_un.S_addr = ...; 
   en 
theAddress.sin_addr.s_addr = ...;


Wanneer gebruik je de ene en wanneer de andere?
Want beiden representeren ze een IP-adres.

Thanks

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

C:
1
2
3
4
5
6
7
typedef struct in_addr {
  union {
    struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
    struct { USHORT s_w1,s_w2; } S_un_w;
    ULONG S_addr;
  } S_un;
} IN_ADDR;


als ik dat goed lees is het gewoon hetzelfde

-niks-


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22:10

.oisyn

Moderator Devschuur®

Demotivational Speaker

Volgens die definitie mag het dus niet. In in_addr zit geen member genaamd 's_addr'.

Echter, dat is de windows implementatie. Let ook op de hoofdletter S in S_un.S_addr. De meeste *nix implementaties (<netinet/in.h>) hebben een in_addr struct met slechts de unsigned long s_addr, en geen union.

En daarom heeft Windows de volgende regel in winsock.h, die je er bij vergeet te zetten:
C++:
1
2
#define s_addr  S_un.S_addr
                                /* can be used for most tcp & ip code */

En tada, s_addr wordt dus letterlijk vertaald naar S_un.S_addr :)

[ Voor 31% gewijzigd door .oisyn op 26-05-2008 12:20 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.