现在对照上表我们来分析tcp_perf_server.c文件的代码。首先我们来看start_application函数,该函数在main函数中调用,后面的函数基本上都是通过该函数回调使用。start_application函数代码如下: 196 void start_application(void) 197 { 198 err_t err; 199 struct tcp_pcb *pcb, *lpcb; 200 201 //创建服务器PCB...
err_t (* sent)(void *arg, struct tcp_pcb *pcb, u16_t space); //当数据被成功发送后被调用 err_t (* recv)(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err); //接收到数据后被调用 err_t (* connected)(void *arg, struct tcp_pcb *pcb, err_t err); //连接...
static err_t tcp_connected_callback(void *arg, struct tcp_pcb *tpcb, err_t err) { xil_printf("txperf: Connected to iperf server\r\n"); connected_pcb = tpcb; //存储连接的TCP状态 tcp_nagle_disable(connected_pcb); tcp_arg(tpcb, NULL); //指定应该传递回调函数的参数 //设置当TCP数据...
171 static err_t tcp_server_accept(void *arg, struct tcp_pcb *newpcb, err_t err) 172 { 173 if ((err != ERR_OK) || (newpcb == NULL)) { 174 return ERR_VAL; 175 } 176 //保存连接的客户端PCB 177 c_pcb = newpcb; 178 179 //保存最终报告的开...
ACCEPTED; //接收连接 es->pcb=newpcb;es->p=NULL;tcp_arg(newpcb,es);
- void tcp_recv(struct tcp_pcb *pcb, err_t (* recv)(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)) 当接收到数据时,本函数设置的回调函数将被调用。如果传递给回调函数一个NULL pbuf则说明远程主机关闭了这个连接。如果函数正常运行并且回调函数返回ERR_OK,则必须释放这个pbuf,如果...
tcp_arg(active_pcb, NULL); tcp_sent(active_pcb, NULL); tcp_recv(active_pcb, NULL); tcp_err(active_pcb, NULL); tcp_poll(active_pcb, NULL, 0); tcp_close(active_pcb); } /* delete es structure */ if (es != NULL) { mem_free(es); ...
tcp_abort(NULL);//终止连接,删除pcb控制块 tcp_arg(tpcb,NULL);tcp_recv(tpcb,NULL);tcp_sent(...
void tcp_client_init(void){ struct tcp_pcb *client_pcb; struct tcp_client_app_arg* app_arg; static struct ip_addr destip; printf("tcp client intin"); IP4_ADDR(&destip,192,168,0,105); client_pcb = tcp_new(); tcp_bind(client_pcb,IP_ADDR_ANY,4); if(client_pcb != NULL) {...
块void*callback_arg; \//指向用户自定义数据,在函数回调时使用u16_t local_port; \//连接绑定的本地端口err_t (* accept)(void*arg,structtcp_pcb *newpcb, err_t err)//回调函数//当处于 LISTEN 状态的控制块侦听到连接,该函数会被调用//下面定义 TCP 控制块数据结构 tcp_pcbstructtcp_pcb{...