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:
parent
2651181900
commit
d749c9a244
2 changed files with 4 additions and 5 deletions
|
@ -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;
|
||||
|
|
|
@ -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!");
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue