最近闲来没事,在看LWIP,是uc/os版本的,在应用程序线程和TCP/IP线程的交互方面,有个疑问,望大家指点迷津: 在opt.h中,定义了 #ifndef LWIP_EVENT_API #define LWIP_EVENT_API 0 #define LWIP_CALLBACK_API 1 #else #define LWIP_EVENT_API 1 #define LWIP_CALLBACK_API 0 #endif
也就是说,应用程序应该有两种方式和协议栈通讯, 在tcp.h中,定义了对应于这两种方式的进程间通信宏定义: #if LWIP_EVENT_API
enum lwip_event { LWIP_EVENT_ACCEPT, LWIP_EVENT_SENT, LWIP_EVENT_RECV, LWIP_EVENT_CONNECTED, LWIP_EVENT_POLL, LWIP_EVENT_ERR };
err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, enum lwip_event, struct pbuf *p, u16_t size, err_t err);
#define TCP_EVENT_ACCEPT(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_ACCEPT, NULL, 0, err) #define TCP_EVENT_SENT(pcb,space,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_SENT, NULL, space, ERR_OK) #define TCP_EVENT_RECV(pcb,p,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_RECV, (p), 0, (err)) #define TCP_EVENT_CONNECTED(pcb,err,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_CONNECTED, NULL, 0, (err)) #define TCP_EVENT_POLL(pcb,ret) ret = lwip_tcp_event((pcb)->callback_arg, (pcb), LWIP_EVENT_POLL, NULL, 0, ERR_OK) #define TCP_EVENT_ERR(errf,arg,err) lwip_tcp_event((arg), NULL, LWIP_EVENT_ERR, NULL, 0, (err)) #else /* LWIP_EVENT_API */ #define TCP_EVENT_ACCEPT(pcb,err,ret) if((pcb)->accept != NULL) (ret = (pcb)->accept((pcb)->callback_arg,(pcb),(err))) #define TCP_EVENT_SENT(pcb,space,ret) if((pcb)->sent != NULL) (ret = (pcb)->sent((pcb)->callback_arg,(pcb),(space))) #define TCP_EVENT_RECV(pcb,p,err,ret) if((pcb)->recv != NULL) { ret = (pcb)->recv((pcb)->callback_arg,(pcb),(p),(err)); } else { if (p) pbuf_free(p); } #define TCP_EVENT_CONNECTED(pcb,err,ret) if((pcb)->connected != NULL) (ret = (pcb)->connected((pcb)->callback_arg,(pcb),(err))) #define TCP_EVENT_POLL(pcb,ret) if((pcb)->poll != NULL) (ret = (pcb)->poll((pcb)->callback_arg,(pcb))) #define TCP_EVENT_ERR(errf,arg,err) if((errf) != NULL) (errf)((arg),(err)) #endif /* LWIP_EVENT_API */
可是,我在整个工程程序中,找不到: err_t lwip_tcp_event(void *arg, struct tcp_pcb *pcb, enum lwip_event, struct pbuf *p, u16_t size, err_t err); 函数的实现在什么地方,望各位给点思路? |