posix_sockets.c: fix send()/write() for connected UDP sockets
Calling send() or write() on a connected UDP socket raises a kernel panic in posix_sockets.c, line 215, because _sockaddr_to_ep() is called from socket_sendto() with address set to NULL. This change modifies socket_sendto() to * Check if the UDP socket is connected when the address argument is NULL. * If connected, use the stored remote endpoint for sock_udp_send().
This commit is contained in:
parent
53af7ebaf5
commit
83e2932eb6
@ -928,7 +928,7 @@ static ssize_t socket_sendto(socket_t *s, const void *buffer, size_t length,
|
||||
return res;
|
||||
}
|
||||
}
|
||||
#if defined(MODULE_SOCK_IP) || defined(MODULE_SOCK_UDP)
|
||||
#if defined(MODULE_SOCK_IP)
|
||||
if ((res = _sockaddr_to_ep(address, address_len, &ep)) < 0)
|
||||
return res;
|
||||
#endif
|
||||
@ -959,7 +959,13 @@ static ssize_t socket_sendto(socket_t *s, const void *buffer, size_t length,
|
||||
#endif
|
||||
#ifdef MODULE_SOCK_UDP
|
||||
case SOCK_DGRAM:
|
||||
if ((res = sock_udp_send(&s->sock->udp, buffer, length, &ep)) < 0) {
|
||||
if (address == NULL) {
|
||||
res = sock_udp_get_remote(&s->sock->udp, &ep);
|
||||
} else {
|
||||
res = _sockaddr_to_ep(address, address_len, &ep);
|
||||
}
|
||||
if ((res < 0) ||
|
||||
(res = sock_udp_send(&s->sock->udp, buffer, length, &ep)) < 0) {
|
||||
errno = -res;
|
||||
res = -1;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user