LwIP Application Developers Manual9---LwIP and multithreading
1.前言
lwIP的内核并不是线程安全的。如果我们必须在多线程环境里使用lwIP,那么我们必须使用“upper”API层的函数(netconn或sockets)。当使用raw API时,你需要自己保护你的内核。
2.并发处理
(1)Sockets通常来说并不能在多个应用线程中使用(在udp/raw netconn,sendto/recv可以实现)。
(2)一些上层操作的并发调用必须被应用层直接处理,如:socket,bind,connect,setsockopt和close。
有些情况必须要lwIP来处理(比如,要知道一个’int socket’的调用在close/socket之间是否都相同是困难的):如下所示
Task1
int s1=socket() (tell s1=)
Task1,Task2
use s1 with send,recv (ok, it could be possible).
Task2
closesocket(s1)
Task3
int s2=socket() (and... it could be s2=)
Task1
send(s1) !!!! Problem, s1 would not the same proto/port than the first we open,
!!!! but only application can know that !!!!
(3)一些操作(recv,recvfrom,send,sendto…)可以变为线程安全。为了使能全双工协议,我们必须将netconn/sockets的一些处理放到api_msg
(4)一些其它需要了解的信息
- 一些特别的函数(netif_xxx和dhcp_xxx)在多线程中可能导致问题。这些函数在tcpip_thread使用相同的变量
(5)一些举例
- 如果一个应用线程删除了一个netif,但tcpip_thread还在运行,这个会导致一个崩溃。在同一个时间内加入2个netif将会导致接口的丢失,详情请查看https://savannah.nongnu.org/bugs/?19347
- 如果有一个应用线程停止了一个接口的dhcp,由于netif’s dhcp字段被dhcp’s定时器使用(在tcpip_thread线程运行),你将导致一个崩溃,详情请查看https://savannah.nongnu.org/patch/?5798
为了避免先前2个问题,你可以使用”netif api”,该api非常接近于‘netif’和‘dhcp’API
LwIP Application Developers Manual9---LwIP and multithreading的更多相关文章
- LwIP Application Developers Manual8---Sample lwIP applications
1.前言 你已经编译lwIP协议栈在你的目标平台上,并且网络驱动正常工作.你可以ping你的设备. 干得好,为你感到骄傲.虽然一个设备可以响应ping,但并不能算一个完整的应用. 现在你可以通过网络接 ...
- LwIP Application Developers Manual12---Configuring lwIP
1.前言 2.LwIP makefiles With minimal features C_SOURCES = \ src/api/err.c \ src/core/init.c \ src/core ...
- LwIP Application Developers Manual11---Initializing lwIP
1.前言 2.Initialization for simple lwIP 查看doc/rawapi.txt来获得更多官方信息 #if NO_SYS /* Network interface vari ...
- LwIP Application Developers Manual2---Protocols概览
1.前言 本文是对LwIP Application Developers Manual的翻译 lwIP是模块化的并支持广泛的协议,这些大部分协议可以被裁减从而减小代码的尺寸 2.协议概览 链路层和网络 ...
- LwIP Application Developers Manual1---介绍
1.前言 本文主要是对LwIP Application Developers Manual的翻译 2.读者(应用开发手册的读者) 谁适合读这份手册 网络应用的开发者 想了解lwIP的网络应用开发者 阅 ...
- LwIP Application Developers Manual5---高层协议之DNS
1.前言 lwIP提供一个基本的DNS客户端(1.3.0后引进),通过使用DNS(Domain Name System)协议来允许应用程序解决主机名到地址的转换. 在文件lwipopts.h里面定义L ...
- LwIP Application Developers Manual5---高层协议之DHCP,AUTOIP,SNMP,PPP
1.前言 本文主要讲述高层协议,包括DHCP 2.DHCP 2.1 从应用的角度看DHCP 你必须确保在编译和链接时使能DHCP,可通过在文件lwipopts.h里面定义LWIP_DHCP选项,该选项 ...
- LwIP Application Developers Manual4---传输层之UDP、TCP
1.前言 本文主要讲解传输层协议UDP TCP 2.UDP 2.1 UDP from an application perspective 2.2 UDP support history in lwI ...
- LwIP Application Developers Manual3---链路层和网络层协议之IPV6,ICMP,IGMP
1.前言 本文主要讲述链路层和网络层的协议IPV6,ICMP 2.IPV6 2.1 IPV6特性 IPv6是IPv4的更新.其最显著的差别在于地址空间由32位转换成128位 2.2 从应用的角度看IP ...
随机推荐
- Storm 使用手册
一.Storm相关术语: Nimbus: Storm集群主节点,负责资源的分配和任务的调度 Supervisor:Storm集群工作节点,接受Nimbus分配的任务,管理Worker Worker:S ...
- 怎么用ajax下载文件
可能大家都觉得没有必要用ajax来下载东西,用window.open(url)就可以搞定 但是这有一个问题,就是这就限定了只能用GET方式来请求了: 可能你又会说GET很符合REST的要求呀. 但是如 ...
- MySQL_函数(待续)
1.REPLACE(str,from_str,to_str) 定义:REPLACE(str,from_str,to_str) 解释:返回值是把字符串str 中的子串from_str 全部替换为to_s ...
- NGINX X-Forwarded-For / XFF / xforword
s https://en.wikipedia.org/wiki/X-Forwarded-For http://www.cnblogs.com/yihang/archive/2010/12/19/191 ...
- Hadoop生产环境配置文件
前提: ①已经搭建好zk ②已经安装好JDK 正文开始: 首先从官网下载hadoop 2.7.3 (虽然官网3.0都出了.但是目前还没经过完全的测试..待测试后...) 一.hadoop-env.sh ...
- python 深浅拷贝 for循环删除
###########################总结########################### 1. 基础数据类型补充 大多数的基本数据类型的知识.已经学完了 a='aaaa' ls ...
- ZOJ - 3450 Doraemon's Railgun (dp)
https://vjudge.net/problem/ZOJ-3450 题意 一座位落(X0,Y0)的城市将遭受n个敌人的摧残.现在我们手上有某科学的超电磁炮,每次攻击都是一条射线,对于共线的敌人,必 ...
- ifconfig: command not found(CentOS 7,其他的可以参考)
ifconfig: command not found 查看path配置(echo相当于c中的printf,C#中的Console.WriteLine) 1 echo $PATH 解决方案1:先看看是 ...
- ArcGis Python脚本——批量对影像、要素类定义投影
这一段是批量定义要素类(FeatureClasses)投影的ArcPy代码: 把要处理的要素类塞进一个文件夹(工作空间,workspace),然后将代码开头的路径换成这个“文件夹”的路径,处理完后再做 ...
- linux_添加图标
sudo gedit /usr/share/applications/Pycharm.desktop [Desktop Entry] Type=Application Name=Pycharm Gen ...