1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

socket: use union instead of casts for socket address

This commit is contained in:
Steffen Vogel 2017-05-28 18:40:22 +02:00
parent 2651181900
commit d749c9a244
2 changed files with 4 additions and 5 deletions

View file

@ -51,6 +51,7 @@ enum socket_header {
union sockaddr_union {
struct sockaddr sa;
struct sockaddr_storage ss;
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
struct sockaddr_ll sll;

View file

@ -152,8 +152,6 @@ char * socket_print(struct node *n)
int socket_start(struct node *n)
{
struct socket *s = n->_vd;
struct sockaddr_in *sin = (struct sockaddr_in *) &s->local;
struct sockaddr_ll *sll = (struct sockaddr_ll *) &s->local;
int ret;
/* Some checks on the addresses */
@ -174,9 +172,9 @@ int socket_start(struct node *n)
/* Create socket */
switch (s->layer) {
case SOCKET_LAYER_UDP: s->sd = socket(sin->sin_family, SOCK_DGRAM, IPPROTO_UDP); break;
case SOCKET_LAYER_IP: s->sd = socket(sin->sin_family, SOCK_RAW, ntohs(sin->sin_port)); break;
case SOCKET_LAYER_ETH: s->sd = socket(sll->sll_family, SOCK_DGRAM, sll->sll_protocol); break;
case SOCKET_LAYER_UDP: s->sd = socket(s->local.sa.sa_family, SOCK_DGRAM, IPPROTO_UDP); break;
case SOCKET_LAYER_IP: s->sd = socket(s->local.sa.sa_family, SOCK_RAW, ntohs(s->local.sin.sin_port)); break;
case SOCKET_LAYER_ETH: s->sd = socket(s->local.sa.sa_family, SOCK_DGRAM, s->local.sll.sll_protocol); break;
default:
error("Invalid socket type!");
}