net/udp: In sendto(), return EHOSTUNREACH if if the network is down.

This commit is contained in:
Gregory Nutt 2018-01-22 18:46:58 -06:00
parent fef255e5be
commit fa3ad46897
2 changed files with 17 additions and 0 deletions

View File

@ -384,6 +384,14 @@ static int sendto_next_transfer(FAR struct socket *psock,
return -ENETUNREACH;
}
/* Make sure that the device is in the UP state */
if ((dev->d_flags & IFF_UP) == 0)
{
nwarn("WARNING: device is DOWN\n");
return -EHOSTUNREACH;
}
/* If this is not the same device that we used in the last call to
* udp_callback_alloc(), then we need to release and reallocate the old
* callback instance.

View File

@ -424,6 +424,15 @@ ssize_t psock_udp_sendto(FAR struct socket *psock, FAR const void *buf,
goto errout_with_lock;
}
/* Make sure that the device is in the UP state */
if ((dev->d_flags & IFF_UP) == 0)
{
nwarn("WARNING: device is DOWN\n");
ret = -EHOSTUNREACH;
goto errout_with_lock;
}
/* Set up the callback in the connection */
state.st_cb = udp_callback_alloc(dev, conn);