mirror of https://gerrit.osmocom.org/libosmocore
socket.h: introduce osmo_sockaddr to hold v4 and v6 endpoints
When dealing with IPv4 and IPv6 address, the struct sockaddr allows to hold IPv4 and IPv6. However even when struct sockaddr is being used, a cast to the IPv4 or IPv6 family must happen. To work around this additional code, use a union for the most common types. Change-Id: If80172373735193401af872b18e1ff00c93880e7
This commit is contained in:
parent
eb6882fa52
commit
8419bb2e9e
|
@ -2,6 +2,7 @@
|
||||||
* Osmocom socket convenience functions. */
|
* Osmocom socket convenience functions. */
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#if (!EMBEDDED)
|
||||||
|
|
||||||
/*! \defgroup socket Socket convenience functions
|
/*! \defgroup socket Socket convenience functions
|
||||||
* @{
|
* @{
|
||||||
|
@ -11,17 +12,24 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#if (!EMBEDDED)
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
/*! maximum length of a socket name ("r=1.2.3.4:123<->l=5.6.7.8:987") */
|
/*! maximum length of a socket name ("r=1.2.3.4:123<->l=5.6.7.8:987") */
|
||||||
#define OSMO_SOCK_NAME_MAXLEN (2 + INET6_ADDRSTRLEN + 1 + 5 + 3 + 2 + INET6_ADDRSTRLEN + 1 + 5 + 1)
|
#define OSMO_SOCK_NAME_MAXLEN (2 + INET6_ADDRSTRLEN + 1 + 5 + 3 + 2 + INET6_ADDRSTRLEN + 1 + 5 + 1)
|
||||||
#endif
|
|
||||||
|
|
||||||
struct sockaddr_in;
|
struct sockaddr_in;
|
||||||
struct sockaddr;
|
struct sockaddr;
|
||||||
struct osmo_fd;
|
struct osmo_fd;
|
||||||
|
|
||||||
|
struct osmo_sockaddr {
|
||||||
|
union {
|
||||||
|
struct sockaddr sa;
|
||||||
|
struct sockaddr_storage sas;
|
||||||
|
struct sockaddr_in sin;
|
||||||
|
struct sockaddr_in6 sin6;
|
||||||
|
} u;
|
||||||
|
};
|
||||||
|
|
||||||
/* flags for osmo_sock_init. */
|
/* flags for osmo_sock_init. */
|
||||||
/*! connect the socket to a remote peer */
|
/*! connect the socket to a remote peer */
|
||||||
#define OSMO_SOCK_F_CONNECT (1 << 0)
|
#define OSMO_SOCK_F_CONNECT (1 << 0)
|
||||||
|
@ -92,4 +100,5 @@ int osmo_sock_mcast_subscribe(int fd, const char *grp_addr);
|
||||||
|
|
||||||
int osmo_sock_local_ip(char *local_ip, const char *remote_ip);
|
int osmo_sock_local_ip(char *local_ip, const char *remote_ip);
|
||||||
|
|
||||||
|
#endif /* (!EMBEDDED) */
|
||||||
/*! @} */
|
/*! @} */
|
||||||
|
|
Loading…
Reference in New Issue