NETCONN_UDPLITE : NETCONN_UDP,event_callback); #define netconn_new_with_callback(t, c)netconn_new_with_proto_and_callback(t, 0, c) 简略实现如下: struct netconn* netconn_new_with_proto_and_callback(enumnetconn_type t, u8_t proto, netconn_callback callback) { structnetconn *con...
所以据此LwIP存在两种移植方式:一是,只移植内核,此时应用程序的编写只能基于RAW/Callback API进行。二是,移植内核和上层API,此时应用程序编写可以使用3种API,即:RAW/Callback API、Sequential API和Socket API。 3、LwIP的带操作系统基本移植 带操作系统的移植首先是建立在无操作系统移植基础之上的。在无操作系统移植...
etconn_listen()函数的本质是一个带参宏,其真正调用的函数是netconn_listen_with_backlog(), 只适用于TCP服务器中调用,它的作用是让netconn连接结构处于监听状态,同时让TCP控制块的状态处于LISTEN状态, 以便客户端连接,同样的,它通过netconn_apimsg()函数请求内核执行lwip_netconn_do_listen(), 这个函数才是真...
那么就释放pbuf,终止连接;如果TCP协议确认了报文段是新的数据,那么就调用带参宏TCP_EVENT_SENT(其实是一个sent的回调函数)去处理,如果报文段中包含有效的数据,就调用TCP_EVENT_RECV去处理 ,如果是收到FIN报文,则调用TCP_EVENT_CLOSED去处理它。
CALLBACK_API 下的种种消息处理函数,不知道它又提供LWIP_EVENT_API这样的接口,意义何在?
//#define LWIP_EVENT_API 0 //#define LWIP_CALLBACK_API 1 //*** // // --- Pbuf options --- // //*** #define PBUF_LINK_HLEN 16 // default is 14 改成16是因为在Stellaris系列中,FIFO中的
LWIP_ASSERT("invalid socket state for recv callback", pcb->state != LISTEN); pcb->recv = recv; } 1. 2. 3. 4. 5. 在程序的搜索pcb->recv,可得出调用的地方: #define TCP_EVENT_RECV(pcb,p,err,ret) \ do { \ if((pcb)->recv != NULL) { \ ...
TCP_EVENT_RECV(pcb, NULL, ERR_OK, err); // 调用自定义的函数接收数据 } if (err == ERR_OK) { //若处理正常则 tcp_output(pcb); // 试图往外发数据包 } } //else有两个地方需要说一下,首先是函数tcp_pcb_remove,源码如下所示,代码里面比较重要的两个函数是TCP_RMV和tcp_pcb_purge,这里就...
_callback(DOMAIN_TO_NETCONN_TYPE(domain,((protocol==IPPROTO_UDPLITE)?NETCONN_UDPLITE:NETCONN_UDP)),event_callback);LWIP_DEBUGF(SOCKETS_DEBUG,("lwip_socket(%s, SOCK_DGRAM, %d) = ",domain==PF_INET?"PF_INET":"UNKNOWN",protocol));break;caseSOCK_STREAM:conn=netconn_new_with_callback(...
LWIP_ASSERT("invalid socket state for recv callback", pcb->state!= LISTEN); pcb->recv=recv; } 在程序的搜索pcb->recv,可得出调用的地方: #define TCP_EVENT_RECV(pcb,p,err,ret) \do{ \if((pcb)->recv!= NULL) { \ (ret) = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err))...