此宏定义于
此宏定义于的561行. 3. #define uip_close()
此函数会以一种谨慎的方式关闭连接. 应用例程: .
此宏定义于的570行. 4. #define uip_abort()
此函数用于中止(重置)当前连接,多用于出现错误导致无法使用uip_close()的场合. 应用示例: .
此宏定义于的581行. 5. #define uip_stop()
告诉发送主机停止发送数据.此函数会关闭接收机窗口,停止从当前连接接收数据. 此宏定义于的591行.
6. #define uip_restart()
如果当前连接曾被uip_stop()停止,那么重新开始. 该函数会重新打开接收机窗口,从当前连接上接收数据. 此宏定义于的610行.
7. #define uip_udpconnection() 此函数查明当前连接是否是一个udp连接. 此宏定义于的626行. 8. #define uip_newdata()
如果uip_appdata指针所指之处有送给应用的新数据,此宏得到一个非零值.数据的大小可以通过uip_len获得. 应用例程: , , , and . 此宏定义于的637行. 9. #define uip_acked()
如果上次发送给远程主机的数据得到回应了,此宏得到一个非零值,这意味着应用可以发送新的数据. 应用例程: , and .
此宏定义于的648行.
10. #define uip_connected()
如果当前连接己经与远程主机连接,则此宏得到非零值.这包括两种情形,一是连接被主动打开(通过uip_connect()),二是连接被被动打开(通过uip_listen()). 应用例程: , , and
此宏定义于的660行. 11. #define uip_closed()
如果远程主机关闭了当前连接,则此宏得到非零值.这时应用可能要做一些清理工作.
应用例程: , , and .
此宏定义于的670行. 12. #define uip_aborted()
如果当前连接被远程主机中止或重置,则为非零值. 应用例程:
, , and 此宏定义于的680行. 13. #define uip_timeout()
如果当前连接由于多次重传导致超时中止,则为非零值. 应用例程:
, , and 此宏定义于的690行. 14. #define uip_rexmit()
如果上次传输的数据在网络中丢失,而应用应该重新传输,则此宏得非零值.应用应该使用uip_send()重新传输与上次传输的完全相同的数据. 应用例程: , and .
该宏定义于中的702行. 参考webclient_appcall(). 15. #define uip_poll()
这个宏解决的问题是连接是不是由uIP轮询的. 应用例程: , , and .
此宏定义于中的716行.
参考 httpd_appcall(),resolv_appcall(), and webclient_appcall(). 16. #define uip_mss()
在连接上传送的当前最大段大小是由接收机的窗口计算和连接的MSS计算的(它可以由uip_initialmss()计算). 应用例程: , and .
此宏定义于中的737行. 17. #uip_udp_remove(conn) 移除一个udp连接. 参数:
conn 指向代表连接的uip_udp_conn的结构体. 应用例程: .
此宏定义于中的775行. 参考resolv_conf();
18. #define uip_udp_bind(conn,port) 绑定一个udp连接到本地端口. 参数:
conn 指向代表udp连接的uip_udp_conn结构体的指针. port 本地端口号,以网络字节顺序.
应用例程: .
此宏定义于中的775行.
19. #define uip_udp_send(len)
在当前连接收发送一个长度为len的数据报.
该函数只有在udp事件(轮询或新数据)才能调用.要发送的数据要提前送到uip_buf缓冲区中uip_appdata指针所指示的位置. 参数:
len 存放在uip_buf中,要发送的数据报的长度. 应用例程: .
此宏定义于中的800行. 20. void listen(u16_t port) 开始监听指定端口. 注意:
由于此函数中所用的参数port是网络字节顺序的,所以需要用到转换函数HTONS()或htons().
1. uip_listen(HTONS(80));
参数:
port 一个16位以网络字节顺序的端口号. 应用例程: , and .
此宏定义于中的529行.
21. void uip_unlisten(u16_t port) 停止监听指定端口. 注意:
由于这里面用到的port是以网络字节顺序的,所以需要用到HTONS()或htons()函数.
1. uip_ipaddr_t ipaddr;
2. uip_ipaddr(&ipaddr, 192,168,1,2); 3. uip_connect(&ipaddr, HTONS(80))
参数:
ripaddr 远程主机的IP地址. port 16位的网络字节顺序的端口号. 返回值:
指向新连接的连接标识符的指针,当没有分配新连接时为NULL. 应用例程: , and .
此函数定义于的407行. 引用了htons(),
uip_conn::lport, uip_conn::tcpstateflags, UIP_CLOSED, uip_conn, UIP_CONNS, and uip_conns.
22. void uip_send( void *data, int len) 在当前连接上发送数据
此函数用于发送一个单段TCP数据.只有uIP因为事件处理而请求的应用才能发送数据.
调用这个函数后实际发送数据量多少取决于TCP允许的数据量多少.uIP会自动裁剪数据,以保证发出去的数据是适量的.可以用uip_mss()来查询实际可以发送的数据量. 注意:
此函数不保证发送的数据能到达目的地.如果数据在网络中丢失,应用会接到请求,此求时uip_rexmit()事件被置位.这时应用就得使用此函数重发数据. 参数:
data 指向将要发送的数据的指针. len 要发送的数据的长度最大值. 应用例程: , , and .
此函数定义于的1888行.
引用了uip_sappdata, and uip_slen.
23. struct uip_udp_conn * uip_udp_new(uip_ipaddr_t * ripaddr ,u16_t rport) 建立新的UDP连接.
此函数用于建立一个新的UDP连接.此函数会自动为新连接分配一个本地未使用的端口.然而,也可以调用uip_udp_new函数之后,调用uip_udp_bind()选择一个新的端口. 例如:
1. uip_ipaddr_t addr; 2. struct uip_udp_conn *c; 3.
4. uip_ipaddr(&addr, 192,168,2,1); 5. c = uip_udp_new(&addr, HTONS(12345)); 6. if(c != NULL) {
7. uip_udp_bind(c, HTONS(12344)); 8. }
参数: ripaddr 远程主机的IP地址. rport 远程主机的端口号,以网络字节顺序. 返回值: 指向新连接结构体uip_udp_conn的指针,如果连接未能分配则为NULL. 应用例程: , and . 定义于的473行. 引用了htons(), uip_udp_conn::lport, uip_udp_conn, UIP_UDP_CONNS, and uip_udp_conns. UIP中文文档第五 原始套接字(protosockets)库
详细说明:
原始套接字(protosocket)为uIP提供了一个与传统BSD套接字接口类似的接口.
不同于为传统uIP事件驱动接口写的程序,为原始套接字(protosocket)接口写的程序是顺序方式执行的,并且无需以明确的状态机方式实现.
原始套接字(protosocket)只能用于TCP连接.
原始大接字(protosocket)库使用\原始线程(protothreads)\来提供顺序控制流.这使得原始套接字在内存方面变得轻量型,但也同时意味着原始套接字继承了\原始线程\的功能限制.每个原始套接字只能生存于单个函数中.自动变量(栈变量)不能跨原始套接字函数调用存在. 注意:
由于原始套接字库使用的是\原始线程(protothreads)\在调用原始套接字库函数时,局部变量并不总能得到保存.所以这里建议局部变量的使用要十分小心。
原始套接字库提供了一些无需处理重传和回应的发送数据函数,和一些无需对被分解成多个TCP段的数据进行处理的读取数据函数。
由于每个原始套接字都作为一个“原始线程”来运行,应在使用原始套接字的函数起始处通过调用PSOCK_BEGIN() 的方式启用原始套接字。与之类似,原始套接字可以通过调用PSOCK_EXIT()结束掉。 相关文件:
??原始套接字库头文件 相关结构体:
struct psock_bufstruct psock??代表一个原始套接字。
#define PSOCK_INIT(psock, buffer, buffersize) 初始化一个原始套接字。 #define PSOCK_BEGIN(psock) 在一个函数中启用一个原始套接字的原始线程。 #define PSOCK_SEND(psock, data, datalen) 发送数据。
#define PSOCK_SEND_STR(psock, str) 发送一个以零结尾的字符串。 #define PSOCK_GENERATOR_SEND(psock, generator, arg) 通过函数(generator)产生数据并发送出去。
#define PSOCK_CLOSE(psock) 关闭一个原始套接字。 #define PSOCK_READBUF(psock) 读数据直到缓冲区满。 #define PSOCK_READTO(psock, c) 读数据到字符c.
#define PSOCK_DATALEN(psock) 获得上次读到的数据长度。 #define PSOCK_EXIT(psock) 退出原始套接字的原始线程。
#define PSOCK_CLOSE_EXIT(psock) 关闭一个原始套接字,并退出其原始线程。 #define PSOCK_END(psock) 声明一个原始套接字的原始线程的结尾。 #define PSOCK_NEWDATA(psock) 查明是否有数据到达原始套接字。
#define PSOCK_WAIT_UNTIL(psock, condition) 等待,直到条件(condition)为真。
#define PSOCK_WAIT_THREAD(psock, condition) PT_WAIT_THREAD(&((psock)->pt), (condition))