芯片:ESP8285
环境:官方RTOS_SDK
在做串口数据通过TCP发送的时候会碰到客户端没200字节一个包发送,但是到server端并不是200字节一个包収的,原因是lwip在TCP通信的时候默认是开启Nagle’s算法的,这个是一种防止一直发小包,serve端接不过来而导致缓存区阻塞导致丢包问题,会把小包缓存成大包进行发送,只要进制就可以了,这里我用的socket API,代码如下:
static void _set_tcp_nodelay(int fd) {
int enable = 1;
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void*)&enable, sizeof(enable));
}
在做websever的时候我碰到了用socket API进入accept阻塞后长时间没有链接,再次连接会出现连接失败问题,至今没有找到原因,我用ESP8266自带的TCP API的可以支持长时间,但是连接次数超过5次后就无法连接了,这里的原因是因为需要显示调用一个初始化接口,但是官方文档里没有给出,代码如下:
espconn_init();
xTaskCreate(vTask_TCP_sever, "vTask_TCP_sever", 500, NULL, 6, NULL);