How to fill sockaddr_storage?

I am trying to use sockaddr_storagestruct in my application. I am curious how to fill it. For example, I have the following code:

sHostAddr.sin_family = AF_INET;
sHostAddr.sin_addr.s_addr = inet_addr (cpIPAddress);

How to replace it if I use sockaddr_storagestruct? I know there are several char arrays, and I suppose I can get equivalent code using array index offsets?

Thanks in advance.

+3
source share
2 answers

The name is a hint, sockaddr_storageintended only for storage, not for access. Use in conjunction with specific protocol structures:

union {
  struct sockaddr         sa;
  struct sockaddr_in      s4;
  struct sockaddr_in6     s6;
  struct sockaddr_storage ss;
} addr;
memset (&addr.s4, 0, sizeof(struct sockaddr_in));
addr.s4.sin_family = AF_INET;
addr.s4.sin_addr.s_addr = INADDR_ANY;

or memcpyfor example

struct sockaddr_storage storage;
struct sockaddr_in sin;

memset (&sin, 0, sizeof (sin));
sin.sin_family = AF_INET
sin.sin_addr.s_addr = inet_addr ("127.0.0.1");
memcpy (&storage, &sin, sizeof (sin));
+2
source

. , , sin_family - AF_INET6, sockaddr_storage sockaddr_in6, , .

, , struct sockaddr_in struct sockaddr_in6 sockaddr_xxx..

: http://www.kame.net/newsletter/19980604/

, . -.

0

All Articles