gnrc_sock_udp: optimized remote ep handling

This commit is contained in:
smlng 2016-12-15 16:57:55 +01:00
parent e2cf221a58
commit a9cb29c46b

View File

@ -217,7 +217,7 @@ ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len,
gnrc_pktsnip_t *payload, *pkt; gnrc_pktsnip_t *payload, *pkt;
uint16_t src_port = 0, dst_port; uint16_t src_port = 0, dst_port;
sock_ip_ep_t local; sock_ip_ep_t local;
sock_ip_ep_t rem; sock_ip_ep_t *rem;
assert((sock != NULL) || (remote != NULL)); assert((sock != NULL) || (remote != NULL));
assert((len == 0) || (data != NULL)); /* (len != 0) => (data != NULL) */ assert((len == 0) || (data != NULL)); /* (len != 0) => (data != NULL) */
@ -275,21 +275,18 @@ ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len,
} }
/* sock can't be NULL at this point */ /* sock can't be NULL at this point */
if (remote == NULL) { if (remote == NULL) {
memcpy(&rem, &sock->remote, sizeof(rem)); rem = (sock_ip_ep_t *)&sock->remote;
dst_port = sock->remote.port; dst_port = sock->remote.port;
} }
else { else {
memcpy(&rem, remote, sizeof(rem)); rem = (sock_ip_ep_t *)remote;
dst_port = remote->port; dst_port = remote->port;
} }
/* check for matching address families in local and remote */ /* check for matching address families in local and remote */
if ((local.family == AF_UNSPEC) && (rem.family != AF_UNSPEC)) { if (local.family == AF_UNSPEC) {
local.family = rem.family; local.family = rem->family;
} }
else if ((local.family != AF_UNSPEC) && (rem.family == AF_UNSPEC)) { else if (local.family != rem->family) {
rem.family = local.family;
}
else if (local.family != rem.family) {
return -EINVAL; return -EINVAL;
} }
/* generate payload and header snips */ /* generate payload and header snips */
@ -302,7 +299,7 @@ ssize_t sock_udp_send(sock_udp_t *sock, const void *data, size_t len,
gnrc_pktbuf_release(payload); gnrc_pktbuf_release(payload);
return -ENOMEM; return -ENOMEM;
} }
res = gnrc_sock_send(pkt, &local, &rem, PROTNUM_UDP); res = gnrc_sock_send(pkt, &local, rem, PROTNUM_UDP);
if (res > 0) { if (res > 0) {
res -= sizeof(udp_hdr_t); res -= sizeof(udp_hdr_t);
} }