lwip raw api tcp iperf服务例程
时间: 2023-07-25 10:37:50 浏览: 131
以下是基于lwIP原始API的TCP IPERF服务的示例代码:
```c
#include "lwip/err.h"
#include "lwip/tcp.h"
#include "lwip/debug.h"
#define IPERF_PORT 5001
#define IPERF_TCP_MAX_SEG_SIZE 1460
#define IPERF_TCP_WND 8192
static err_t iperf_accept(void *arg, struct tcp_pcb *newpcb, err_t err);
static err_t iperf_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err);
void iperf_init(void)
{
struct tcp_pcb *iperf_pcb;
iperf_pcb = tcp_new();
tcp_bind(iperf_pcb, IP_ADDR_ANY, IPERF_PORT);
iperf_pcb = tcp_listen(iperf_pcb);
tcp_accept(iperf_pcb, iperf_accept);
}
static err_t iperf_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
{
tcp_arg(newpcb, NULL);
tcp_recv(newpcb, iperf_recv);
tcp_setprio(newpcb, TCP_PRIO_MIN);
tcp_setwnd(newpcb, IPERF_TCP_WND);
tcp_set_max_seg_size(newpcb, IPERF_TCP_MAX_SEG_SIZE);
return ERR_OK;
}
static err_t iperf_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
if (p == NULL)
{
tcp_close(tpcb);
return ERR_OK;
}
pbuf_free(p);
return ERR_OK;
}
```
这个示例代码实现了一个TCP IPERF服务,监听IPERF_PORT端口,并接受连接请求。一旦连接建立,它将设置TCP窗口大小、最大段大小和优先级,并注册回调函数iperf_recv()来接收数据。在iperf_recv()中,它只是简单地释放收到的pbuf,并返回ERR_OK。
阅读全文