Browse Source

Merge pull request #3618 from longtengmcu/master

fix three bugs about ethernet
Bernard Xiong 5 năm trước cách đây
mục cha
commit
a6a8b90935

+ 17 - 1
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;

+ 10 - 0
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 */

+ 3 - 0
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);