tcpclient
tcpclient copied to clipboard
基于多线程的非阻塞 socket 编程
1. 关闭socket clinet时,两个thread线程也访问了这个handle,不安全。 2. 多线程的这种操作socket方式不建议
在tcpclient.c中,342行(pipe_buff[res] = '\0';)这句话,当res=BUFF_SIZE时,写操作会超出内存边界,导致(free(pipe_buff);)失败,报错内容(to free a bad data block: mem: 0x2001708c, used flag: 1, magic code: 0x1e00),需要屏蔽342行,第325行(sock_buff[res] = '\0';)也可能导致同样的问题。
粘包问题
多个线程同时往pipe中写入数据,而发送数据读取pipe中的数据进行发送,那是否存在多包数据粘包在一起发送的情况呢?
使用sal+dfs中的select ---------------------------------------------------------- 应用线程**主动**closesocket 时,select返回0,但select设置超时后也返回0,这两者怎么区分? (ps:closesocket 过N久后,select也会返回1,表示一个可读事件,读取recv返回0,表示断开) 使用lwip中的select(即关闭sal和dfs组件) ---------------------------------------------------------- 应用线程**主动**closesocket 时,select返回1,代表有一个可读事件,读取recv返回0,表示断开。