gnrc_sock_udp: optimized remote ep handling
This commit is contained in:
parent
e2cf221a58
commit
a9cb29c46b
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user