Difference between revisions of "Socket structs"
From Ilianko
(→Адреси) |
|||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== addrinfo == | == addrinfo == | ||
+ | |||
+ | <code><pre> | ||
+ | ----------- | ||
+ | addrinfo | ||
+ | ----------- | ||
+ | | | ||
+ | sockaddr | ||
+ | | | ||
+ | </pre></code> | ||
<code><pre> | <code><pre> | ||
Line 14: | Line 23: | ||
}; | }; | ||
</pre></code> | </pre></code> | ||
+ | |||
+ | == Адреси == | ||
+ | <code><pre> | ||
+ | struct sockaddr { | ||
+ | unsigned short sa_family; // address family, AF_xxx | ||
+ | char sa_data[14]; // 14 bytes of protocol address | ||
+ | }; | ||
+ | </pre></code> | ||
+ | където | ||
+ | *'''sa_family''' е най-често - AF_INET за IPv4 или AF_INET6 за IPv6 | ||
+ | *'''sa_data''' е дестинация и порт сокета | ||
+ | |||
+ | или | ||
+ | |||
+ | |||
+ | за IPv4 | ||
+ | <code><pre> | ||
+ | struct sockaddr_in { | ||
+ | short int sin_family; // Address family, AF_INET | ||
+ | unsigned short int sin_port; // Port number | ||
+ | struct in_addr sin_addr; // Internet address | ||
+ | unsigned char sin_zero[8]; // Same size as struct sockaddr | ||
+ | }; | ||
+ | </pre></code> | ||
+ | където | ||
+ | |||
+ | <code><pre> | ||
+ | struct in_addr { | ||
+ | uint32_t s_addr; // that's a 32-bit int (4 bytes) | ||
+ | }; | ||
+ | </pre></code> | ||
+ | |||
+ | за IPv6 | ||
+ | <code><pre> | ||
+ | struct sockaddr_in6 { | ||
+ | u_int16_t sin6_family; // address family, AF_INET6 | ||
+ | u_int16_t sin6_port; // port number, Network Byte Order | ||
+ | u_int32_t sin6_flowinfo; // IPv6 flow information | ||
+ | struct in6_addr sin6_addr; // IPv6 address | ||
+ | u_int32_t sin6_scope_id; // Scope ID | ||
+ | }; | ||
+ | |||
+ | struct in6_addr { | ||
+ | unsigned char s6_addr[16]; // IPv6 address | ||
+ | }; | ||
+ | </pre></code> | ||
+ | |||
+ | <code><pre> | ||
+ | struct sockaddr_storage { | ||
+ | sa_family_t ss_family; // address family | ||
+ | // all this is padding, implementation specific, ignore it: | ||
+ | char __ss_pad1[_SS_PAD1SIZE]; | ||
+ | int64_t __ss_align; | ||
+ | char __ss_pad2[_SS_PAD2SIZE]; | ||
+ | }; | ||
+ | </pre></code> | ||
+ | |||
+ | |||
[[Category:sockets]] | [[Category:sockets]] |
Latest revision as of 13:59, 12 April 2013
addrinfo
-----------
addrinfo
-----------
|
sockaddr
|
struct addrinfo
{
int ai_flags; // AI_PASSIVE, AI_CANONNAME, etc.
int ai_family; // AF_INET, AF_INET6, AF_UNSPEC
int ai_socktype; // SOCK_STREAM, SOCK_DGRAM
int ai_protocol; // use 0 for "any"
size_t ai_addrlen; // size of ai_addr in bytes
struct sockaddr *ai_addr; // struct sockaddr_in or _in6
char *ai_canonname; // full canonical hostname
struct addrinfo *ai_next; // linked list, next node
};
Адреси
struct sockaddr {
unsigned short sa_family; // address family, AF_xxx
char sa_data[14]; // 14 bytes of protocol address
};
където
- sa_family е най-често - AF_INET за IPv4 или AF_INET6 за IPv6
- sa_data е дестинация и порт сокета
или
за IPv4
struct sockaddr_in {
short int sin_family; // Address family, AF_INET
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; // Same size as struct sockaddr
};
където
struct in_addr {
uint32_t s_addr; // that's a 32-bit int (4 bytes)
};
за IPv6
struct sockaddr_in6 {
u_int16_t sin6_family; // address family, AF_INET6
u_int16_t sin6_port; // port number, Network Byte Order
u_int32_t sin6_flowinfo; // IPv6 flow information
struct in6_addr sin6_addr; // IPv6 address
u_int32_t sin6_scope_id; // Scope ID
};
struct in6_addr {
unsigned char s6_addr[16]; // IPv6 address
};
struct sockaddr_storage {
sa_family_t ss_family; // address family
// all this is padding, implementation specific, ignore it:
char __ss_pad1[_SS_PAD1SIZE];
int64_t __ss_align;
char __ss_pad2[_SS_PAD2SIZE];
};