c - Extracting IP and port from multiple sockaddr_storage's into a char* -


i have fixed length array, every entry type struct contact

typedef struct contact {     int fd;      union     {            struct sockaddr_in v4addr;         struct sockaddr_in6 v6addr;         struct sockaddr_storage stor;     };        char buf[frame_buf_len];     int len;         char name[32]; } contact_t; 

and need extract ip , port every entry char*. result should this

192.168.0.1 1234\n192.168.0.2 1235\n192.168.0.3 1236\n //and on.. 

i have no clue how information , allocate correct size final char*.

use (for example) struct sockaddr_storage stor's member ss_family determine address family , depending on chose v4addr or v6addr used inet_ntop().

the port number comes in network bytes order, shall pass ntohs() before being used.

the members of v4addr , v6addr used drawn <netinet/in.h>:

/* structure describing internet socket address.  */ struct sockaddr_in {   [...]    in_port_t sin_port;                 /* port number.  */   struct in_addr sin_addr;            /* internet address.  */    [...] };  /* ditto, ipv6.  */ struct sockaddr_in6 {   [...]    in_port_t sin6_port;        /* transport layer port # */    [...]    struct in6_addr sin6_addr;  /* ipv6 address */    [...] }; 

to create buffers size unknown @ compile time, use dynamic memory allocation in general.

for successivly allocating memory block of increasing size, when looping through arrray , adding address:port tuples use realloc() in particular.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -