LWIP netbuf netconn函数

来源:互联网 发布:php无限极分类菜单 编辑:程序博客网 时间:2024/04/28 15:40

 http://wenku.baidu.com/view/d49a3a2bbd64783e09122b3f.html###

缓冲区函数

函数名称

功能

原型

参数

返回

netbuf_new()

分配并初始化一个netbuf结构

Struct netbuf *netbuf_new (void)

NULL: 无可用的内存时

netbuf:函数正常调用,返回一个netbuf结构的指针

netbuf_delete()

回收已经建立的netbuf结构

void netbuf_delete (struct netbuf *buf)

buf: 准备回收的netbuf结构

netbuf_alloc ()

为指定的netbuf结构分配指定字节大小的缓冲区内存

void *netbuf_alloc(struct netbuf *buf, u16_t size)

buf: 指定一个待分配内存的netbuf结构

size: 指定为netbuf分配内存的字节数

NULL: 无可用的内存时

void *:函数正常调用,返回一个指向已分配内存的指针

netbuf_free()

回收与指定的netbuf结构相关联的缓冲区

void netbuf_free(struct netbuf *buf)

buf: 指定的netbuf结构

netbuf_ref()

回收与指定的netbuf结构相关联的缓冲区

err_t netbuf_ref (struct netbuf *buf, const void *dataptr, u16_t size)

buf: 指定的netbuf结构

dataptr:指向存储区数据的指针

size:存储区数据的大小(以字节为单位)

buf: 指定的netbuf结构

dataptr:指向存储区数据的指针

size:存储区数据的大小(以字节为单位)

netbuf_chain ()

将两个netbuf结构的首尾链接在一起

void netbuf_chain (struct netbuf *head, struct netbuf *tail)

head: 首部的netbuf结构

tail:尾部的netbuf结构

netbuf_data()

获取一个指向netbuf 结构中的数据的指针

err_t netbuf_data (struct netbuf *buf, void **dataptr, u16_t *len)

err_t netbuf_data (struct netbuf *buf, void **dataptr, u16_t *len)

ERR_OK:数据被正确地获取

ERR_BUF:有错误发生,数据未能被正确地获取

netbuf_next()

修改netbuf中的数据片段的指针以便指向netbuf中的下一个数据片段

s8_t netbuf_next(struct netbuf *buf)

buf: 需要修改数据片段指针的netbuf结构

-1:表明已经到了最后一个数据片段的后面的位置,netbuf中已经没有数据片段了

1: 表明指针现在正指向最后一个数据片段

0: 表明netbuf中还有很多的数据片段存在

netbuf_first ()

修改netbuf中的数据片段的指针以便指向netbuf中的下一个数据片段

void netbuf_first(struct netbuf *buf)

buf: 需要修改数据片段指针的netbuf结构

其它函数

函数

netbuf_copy()的定义服务的, 完成数据块复制的功能

netbuf_len()用来获取 netbuf buf中的数据长度

netbuf_fromaddr()用于获取接收到的 netbuf buf的主机 IP地址。

netbuf_fromport()用于获取接收到的 netbuf buf 的主机端口号。

网络连接函数调用

函数名称

功能

原型

参数

返回

netconn_new_with_proto_and_callback ()

建立一个确定类型的连接,并为其分配一个回调函数

struct netconn *netconn_new_with_proto_and_callback (enum netconn_type t, 

u8_t proto, 

netconn_callback callback)

见下*1

NULL:  当内存分配错误时

netconn: 函数正常调用,返回一个netconn结构的指针

netconn_delete ()

关闭一个netconn连接并释放它占用的所有资源

err_t netconn_delete(struct netconn *conn)

conn: 准备删除的连接

ERR_OK:当连接被正确删除时

netconn_type ()

获取由参数conn指定的连接类型

enum netconn_type netconn_type (struct netconn *conn)

conn: 指定获取类型的连接

参数conn的连接类型,为枚举类型enum netconn_type中的一项,与函数netconn_new_with_proto

_and_callback()中的参数t相同

netconn_getaddr ()

*2

获取指定连接的远程或本地的IP地址及端口号

err_t netconn_getaddr (struct netconn *conn, 

struct ip_addr *addr, 

u16_t *port, 

u8_t local)

*3

ERR_OK:表示正确获取了当前连接信息

ERR_CONN:表示当前连接不可用

netconn_bind ()

为指定的连接绑定确定的本地IP地址和端口号

err_t netconn_bind(struct netconn *conn, struct ip_addr *addr, u16_t port)

conn: 指定要绑定的连接

addr: 为连接指定绑定的IP地址(当等于参数IP_ADDR_ANY时,则绑定到所有的本地IP地址)。

port: 为连接指定绑定的端口号,不能用于RAW

ERR_OK:表示绑定正确

其它一个不确定的值:表示绑定失败

netconn_connect ()

将一个指定的连接连接到一个具有指定IP 地址和端口号的主机

err_t netconn_connect (struct netconn *conn, struct ip_addr *addr, u16_t port)

conn: 指定一个连接

addr: 连接远程主机的IP地址

port: 连接远程主机的端口号(不能用于RAW类型的连接)

ERR_OK:当正确地建立连接时

netconn_disconnect ()

断开一个指定的连接(仅能用于UDP连接)

err_t netconn_disconnect (struct netconn *conn)

conn: 指定要断开的连接

ERR_OK:当连接被正确删除时

netconn_listen_with_backlog ()

使指定的连接进入TCP(TCP LISTEN)监听状态

err_t netconn_listen_with_backlog (struct netconn *conn, u8_t backlog)

conn: 指定准备设置进入监听状态的TCP类型的连接

backlog:设定监听的积压工作,即可以有多少工作等待处理,使用它必须在文件lwipopts.h中设置

TCP_LISTEN_BACKLOG = 1

ERR_OK:表示连接正确进入监听状态

其它值:表示有错误发生

netconn_accept ()

阻塞进程直至从远程主机发出的连接请求到达指定的连接

struct netconn *netconn_accept (struct netconn *conn)

conn: 指定一个已经建立了的TCP类型的连接

netconn:表示与远程主机正确地建立了连接,返回新连接的数据结构

NULL:表示超时连接失败

netconn_recv ()

阻塞进程,等待数据到达指定的连接

struct netbuf *netconn_recv (struct netconn *conn)

conn: 指定一个接收数据的连接

NULL:表示连接已经被远程主机关闭

netbuf: 数据正确接收,返回一个包含着接收到的数据的netbuf结构

netconn_sendto ()

向远程主机发送数据(仅能用于UDP 或RAW类型的连接)

err_t netconn_sendto (struct netconn *conn, 

struct netbuf *buf, 

struct ip_addr *addr, 

u16_t port)

conn: 指定发送数据的连接

buf:包含发送数据的一个缓冲区数据结构

addr:远程主机的IP地址

port:远程主机的端口号

ERR_OK:表示数据被正确地发送

err_t类型的其它值:表示有错误发生

netconn_send ()

发送数据(仅能用于UDP 或RAW类型的连接)

err_t netconn_send (struct netconn *conn, struct netbuf *buf)

conn: 指定发送数据的连接

buf:包含发送数据的一个缓冲区数据结构

ERR_OK:表示数据被正确地发送

err_t类型的其它值:表示有错误发生

netconn_write ()

发送TCP数据

err_t netconn_write (struct netconn *conn, const void *dataptr, int size, u8_t apiflags)

*4

ERR_OK:表示数据被正确地发送

err_t类型的其它值:表示有错误发生

netconn_close ()

关闭指定的TCP连接

err_t netconn_close (struct netconn *conn)

conn: 指定关闭的连接

ERR_OK:表示连接正常关闭

err_t类型的其它值:表示有错误发生

netconn_join_leave_group()

使连接参加或退出一个UDP 类型的多播组

err_t netconn_join_leave_group (struct netconn *conn,

                        struct ip_addr *multiaddr,

                           struct ip_addr *interface,

                           enum netconn_igmp join_or_leave)

conn::指定一个用于改变多播地址的UDP 类型的连接

multiaddr:参加会退出多播组的广播IP地址

interface:用于发送igmp信息的网络接口的IP地址

join_or_leave:表示参加还是退出一个多播组,可以为NETCONN_JOIN 或NETCONN_LEAVE

ERR_OK:表示连接被正确加入或退出多播组

err_t类型的其它值:表示有错误发生

netconn_gethostbyname ()

进行一次DNS 的查询

err_t netconn_gethostbyname (const char *name, struct ip_addr *addr)

name:一个字符串,表示要查询的一个DNS主机的名字

addr:查询到的DNS名字对应的IP地址

*5

函数 netconn_peer()表示获取远程主机的 IP地址及端口号

netconn_addr()则表示

获取指定连接的本地 IP地址和端口号。

函数 netconn_listen()表示使 TCP进入监听(TCP LISTEN)状态,

函数 netconn_err()和 netconn_recv_bufsize()则表示获取 conn 连接的一些状态信息

 

IP4_ADDR(ipaddr, a,b,c,d)

格式化指定设置的IP地址

*6

ipaddr:指定要格式化的ipaddr类型的数据

a:IP地址的最高字节

b:IP地址的第三个字节

c:IP地址的第二个字节

d:IP地址的最低字节

 

 

 

 

 

*1 t: 所创建的连接的类型,可以取NETCONN_INVALID:NETCONN_TCP、NETCONN_UDP、

NETCONN_UDPLITE、NETCONN_UDPNOCHKSUM、NETCONN_RAW

proto:RAW IP pcb的IP协议

callback:当物理链路有数据接收或发送时调用的回调函数

*2 netconn_peer()和 netconn_addr(),分别

用于获取远程主机的 IP地址信息和本地主机的 IP地址信息

*3 conn: 指定的连接

addr: 该参数为结果参数,存放获取连接的IP地址

port: 该参数为结果参数,存放获取连接的端口号(对于RAW,存放协议类型)

local: 为1表示获取本地主机的IP地址及端口号;为0表示获取远程主机的IP地址及端口号

*4 conn: 准备发送数据的TCP连接

dataptr:指向发送数据缓冲区的指针

size:发送数据的长度。这里对数据长度没有任何限制。这个函数不需要应用程序明确地分配缓冲

区(buffers),因为这可由协议栈来负责

apiflags:可以取 NETCONN_NOCOPY  、NETCONN_COPY 和 NETCONN_MORE 中的一个。当

flags值为NETCONN_COPY时, dataptr指针指向的数据将被复制到为这些数据分配的内存缓冲区。

这就允许这些数据在函数调用后可以直接修改,但是这会在执行时间和内存使用率方面有所降低。

如果 flags 值为 NETCONN_NOCOPY,则数据不会复制而是直接使用 dataptr 指针来引用。这些数

据在函数调用后不能被修改,因为这些数据可能会被放在当前指定连接的重发队列,并且会在里面

逗留一段不确定的时间。 当要发送的数据在ROM中因而数据不可变时很有用。 而参数NETCONN_

MORE则指向上次发送的那个数据段,适用于连续发送数据的情况。。

*5 ERR_OK: 表示查询成功,函数正常返回。

ERR_MEM:内存错误,稍后会重试,重新查询。

ERR_ARG:DNS客户端未初始化或者没有找到合适的主机名。

ERR_VAL:DNS服务器无响应。

*6#define IP4_ADDR (ipaddr, a,b,c,d) \

     (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \

                               ((u32_t)((b)& 0xff) << 16) | \

                               ((u32_t)((c)& 0xff) << 8) | \

                                (u32_t)((d)& 0xff))