4
0
mirror of https://github.com/RT-Thread/rt-thread.git synced 2025-01-18 18:03:31 +08:00

1、解决do_pollfd函数中处理底层网络设备返回错误-1的情况,返回-1时select函数也要返回-1

2、网卡设备调用关闭dhcp时,底层要调用dhcp_stop函数来关闭dhcp功能,打开时再调用dhcp_start,否则再次打开dhcp时无法获取ip地址或者出现在使用静态ip地址会在dhcp租约到期时自动再获取ip地址。
3、sal_socket.c程序中的sal_accept函数增加判断网卡up,down的功能
This commit is contained in:
longtengmcu 2020-05-17 15:51:35 +08:00
parent 21a3ba358a
commit 63950c9259
3 changed files with 30 additions and 1 deletions

View File

@ -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 zhaoshimin 20200509*/
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 zhaoshimin 20200509*/
pt->req._proc = RT_NULL;
return ret;
}
else if(ret > 0)
{
num ++;
pt->req._proc = RT_NULL;

View File

@ -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);
/*zhaoshimin 20200508 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 */

View File

@ -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 zhaoshimin add 20200509*/
SAL_NETDEV_IS_UP(sock->netdev);
/* check the network interface socket operations */
SAL_NETDEV_SOCKETOPS_VALID(sock->netdev, pf, accept);