summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--components/dfs/src/poll.c18
-rw-r--r--components/net/lwip-2.0.2/src/netif/ethernetif.c10
-rw-r--r--components/net/sal_socket/src/sal_socket.c3
3 files changed, 30 insertions, 1 deletions
diff --git a/components/dfs/src/poll.c b/components/dfs/src/poll.c
index 3f304549f7..fc48eca758 100644
--- a/components/dfs/src/poll.c
+++ b/components/dfs/src/poll.c
@@ -137,6 +137,14 @@ static int do_pollfd(struct pollfd *pollfd, rt_pollreq_t *req)
req->_key = pollfd->events | POLLERR | POLLHUP;
mask = f->fops->poll(f, req);
+
+ /* dealwith the device return error -1*/
+ if (mask < 0)
+ {
+ fd_put(f);
+ pollfd->revents = 0;
+ return mask;
+ }
}
/* Mask out unneeded events. */
mask &= pollfd->events | POLLERR | POLLHUP;
@@ -154,6 +162,7 @@ static int poll_do(struct pollfd *fds, nfds_t nfds, struct rt_poll_table *pt, in
int istimeout = 0;
int n;
struct pollfd *pf;
+ int ret = 0;
if (msec == 0)
{
@@ -168,7 +177,14 @@ static int poll_do(struct pollfd *fds, nfds_t nfds, struct rt_poll_table *pt, in
for (n = 0; n < nfds; n ++)
{
- if (do_pollfd(pf, &pt->req))
+ ret = do_pollfd(pf, &pt->req);
+ if(ret < 0)
+ {
+ /*dealwith the device return error -1 */
+ pt->req._proc = RT_NULL;
+ return ret;
+ }
+ else if(ret > 0)
{
num ++;
pt->req._proc = RT_NULL;
diff --git a/components/net/lwip-2.0.2/src/netif/ethernetif.c b/components/net/lwip-2.0.2/src/netif/ethernetif.c
index 6c5621281c..be16da7ad3 100644
--- a/components/net/lwip-2.0.2/src/netif/ethernetif.c
+++ b/components/net/lwip-2.0.2/src/netif/ethernetif.c
@@ -164,6 +164,16 @@ static int lwip_netdev_set_dns_server(struct netdev *netif, uint8_t dns_num, ip_
static int lwip_netdev_set_dhcp(struct netdev *netif, rt_bool_t is_enabled)
{
netdev_low_level_set_dhcp_status(netif, is_enabled);
+
+ /*add dhcp start or stop must call dhcp_start and dhcp_stop function*/
+ if(is_enabled == RT_TRUE)
+ {
+ dhcp_start((struct netif *)netif->user_data);
+ }
+ else
+ {
+ dhcp_stop((struct netif *)netif->user_data);
+ }
return ERR_OK;
}
#endif /* RT_LWIP_DHCP */
diff --git a/components/net/sal_socket/src/sal_socket.c b/components/net/sal_socket/src/sal_socket.c
index e3bea5a28e..ec0519df02 100644
--- a/components/net/sal_socket/src/sal_socket.c
+++ b/components/net/sal_socket/src/sal_socket.c
@@ -564,6 +564,9 @@ int sal_accept(int socket, struct sockaddr *addr, socklen_t *addrlen)
/* get the socket object by socket descriptor */
SAL_SOCKET_OBJ_GET(sock, socket);
+ /* check the network interface is up status */
+ SAL_NETDEV_IS_UP(sock->netdev);
+
/* check the network interface socket operations */
SAL_NETDEV_SOCKETOPS_VALID(sock->netdev, pf, accept);