diff --git a/components/net/netdev/src/netdev.c b/components/net/netdev/src/netdev.c index e4a88ca022..bfefc2d1de 100644 --- a/components/net/netdev/src/netdev.c +++ b/components/net/netdev/src/netdev.c @@ -269,7 +269,7 @@ struct netdev *netdev_get_by_family(int family) { netdev = rt_slist_entry(node, struct netdev, list); pf = (struct sal_proto_family *) netdev->sal_user_data; - if (pf && pf->skt_ops && pf->family == family && netdev_is_up(netdev)) + if (pf && pf->skt_ops && pf->family == family && netdev_is_up(netdev) && netdev_is_link_up(netdev)) { rt_hw_interrupt_enable(level); return netdev; diff --git a/components/net/sal_socket/src/sal_socket.c b/components/net/sal_socket/src/sal_socket.c index 68e1375849..008a29e252 100644 --- a/components/net/sal_socket/src/sal_socket.c +++ b/components/net/sal_socket/src/sal_socket.c @@ -174,7 +174,7 @@ static void check_netdev_internet_up_work(struct rt_work *work, void *work_data) goto __exit; } - skt_ops = pf->skt_ops; + skt_ops = pf->skt_ops; if((sockfd = skt_ops->socket(AF_INET, SOCK_DGRAM, 0)) < 0) { result = -RT_ERROR; @@ -394,7 +394,7 @@ static int socket_init(int family, int type, int protocol, struct sal_socket **r return -3; } - if (netdev_is_up(netdv_def)) + if (netdev_is_up(netdv_def) && netdev_is_link_up(netdv_def)) { /* check default network interface device protocol family */ pf = (struct sal_proto_family *) netdv_def->sal_user_data;