LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)
1、使用raw/callback API编程,用户编程的方法是向内核注册各种自定义的回调函数,回调函数是与内核实现交换的唯一方式。
recv_udp, accept_function, sent_tcp, recv_tcp, do_connected, poll_tcp, err_tcp!
2、协议栈API(sequential API)是基于raw/callback API实现的,它与内核交换的方式也只能通过回调。
netconn_new, netconn_delete, netconn_getaddr, netconn_connect, netconn_disconnect, netconn_listen, netconn_accept,
netconn_recv, netconn_send, netconn_write, netconn_close
注: netconn_send 是给UDP使用的。
netconn_write是给TCP使用的。但是tcp发送时,有三种选择:
(1)NETCONN_COPY 标志告诉协议栈将待发送数据拷贝到内核进程所属的内存空间,在这种情况下,会消耗系统的部分时间和内存资源,但是用户进程
可以在向内核提交数据后立即重新使用这些数据区域,甚至删除这些区域,而不必等待内核是否完全正确发送。如果用户没有设置该位,则内核构造发送
数据包是,会引用这些发送数据的内存区域,在这种情况下,用户进程不能再对这些数据进行修改,这种方式通常用在静态数据(ROM数据)的发送中。
对于非ROM数据的发送,用户应尽量设置NETCONN_COPY标志。
(2)NETCONN_MORE标志,当其置位时,组装这些数据的最后一个TCP报文段首部PSH标志将被设置,这样,数据在接收端将被尽快的递交给上层,而不会缓冲等待。
3、BSD API(或者说 SOCKET API),是Lwip设计者对sequential API函数进行了简单封装后的函数。
socket、bind、connect、listen、accept、sendto、write、recvfrom、read、close。
sendto、recvfrom:主要用于UDP,但是也可用于TCP。
write、read:主要用于TCP,但是也可用于UDP。
LwIP - raw/callback API、协议栈API(sequential API)、BSD API(或者说 SOCKET API)的更多相关文章
- socket编程 ------ BSD socket API
伯克利套接字(Berkeley sockets),也称为BSD Socket.伯克利套接字的应用编程接口(API)是采用C语言的进程间通信的库,经常用在计算机网络间的通信. BSD Socket的应用 ...
- TCP协议和socket API 学习笔记
本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类: 原文地址:TCP协议和socket API 学习笔记 作者:gilb ...
- 【ASP.NET Web API教程】1.1 第一个ASP.NET Web API
Your First ASP.NET Web API (C#)第一个ASP.NET Web API(C#) By Mike Wasson|January 21, 2012作者:Mike Wasson ...
- Creating Your Own Server: The Socket API, Part 1
转:http://www.linuxforu.com/2011/08/creating-your-own-server-the-socket-api-part-1/ By Pankaj Tanwar ...
- Creating Your Own Server: The Socket API, Part 2
转:http://www.linuxforu.com/2011/09/creating-your-own-server-the-socket-api-part-2/ By Pankaj Tanwar ...
- 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)
原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...
- UNIX网络编程——SOCKET API和TCP STATE的对应关系_三次握手_四次挥手及TCP延迟确认
在socket系统调用中,如何完成三次握手和四次挥手: SOCK_DGRAM即UDP中的connect操作知识在内核中注册对方机器的IP和PORT信息,并没有建立连接的过程,即没有发包,close也不 ...
- c/c++ socket API 调用后的错误判断 perror errno
socket API 调用后的错误判断 perror errno 调用完socket API后,需要判断调用是否成功与失败.如果失败,会自动设置errno(是个整数), 并且用perror可以打印出具 ...
- JNI 和 socket api
1.JavaVM 和 JNIEnvJNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立.JavaVM是虚拟机在JNI层的代表,在一个虚拟机进程中只有一个JavaVM,因此该进程的所有线程 ...
随机推荐
- python2.7入门---模块(Module)
来,这次我们就看下Python 模块(Module).它是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句.模块让你能够有逻辑地组织你的 Pytho ...
- SAN---第二网的概念
网络技术的优缺点:优点:连接能力,超强路由,管理能力,远距离缺点:低速以及高负载,强烈的软件需求,错误检测能力 SAN:storage area network(存储区域网络)--是一种基于光网的特殊 ...
- 记一次艰难的CTP调试
一个atmel,mxt540e的CTP触摸屏. 中断配置为下降沿,输入上拉. 总是只能触发一次中断,中断脚就一直低电平,无法拉高.这只是表面现象 不停找底层I2C驱动,改代码,没用.要靠波形来说话 ...
- jar命令:打包、查看、更新等
如何把写好的Java程序打包为jar文件呢?下面说的就是java使用命令行打包JAR的方法 1.命令行的方式:打包jar cf JAR文件名称 程序文件名称或者程序所在的文件夹举例:jar cf My ...
- (2)分布式下的爬虫Scrapy应该如何做-关于对Scrapy的反思和核心对象的介绍
本篇主要介绍对于一个爬虫框架的思考和,核心部件的介绍,以及常规的思考方法: 一,猜想 我们说的爬虫,一般至少要包含几个基本要素: 1.请求发送对象(sender,对于request的封装,防止被封) ...
- 【多校联合】(HDU6095)Rikka with Competition
题意:给定$n$个数,代表$n$个选手的能量高低,现在再给一个$k$,任意在$n$个选手中挑取两个选手比赛,如果$|a_i−a_j|>K$,那么能量高的选手获胜,另一个将被淘汰,否则两个人都有机 ...
- HTML5 本地存储Web Storage简单了解
HTML5本地存储规范,定义了两个重要的API :Web Storage 和 本地数据库Web SQL Database. 本地存储Web Storage 实际上是HTML4的cookie存储机 ...
- LeetCode 23 ——合并 K 个排序链表
1. 题目 2. 解答 2.1. 方法一 在 合并两个有序链表 的基础上,我们很容易想到第一种解法,首先我们将第一个链表和第二个链表合并成一个新的链表,然后再往后依次合并接下来的每个链表即可. 假设每 ...
- 使用JDK的keytool生成Android签名证书
生成证书:keytool -genkey -alias [yourapp] -keyalg RSA -validity 20000 -keystore [yourapp].keystore 输入key ...
- mysql 查询表的字段数目
select column_name from information_schema.`COLUMNS` where TABLE_NAME ='tcm_head'