Девайс работает как сервер. После того как от netconn_accept будет получено новое соединение создаю 2 потока один для чтения, другой для записи. Читаю вот так:
Код
void СE2ComRead::СThread()
{
struct netbuf *buf;
while((!TerminateFlag)&&((buf = netconn_recv(Conn)) != NULL))
{
do{
char *p_data;
u16_t len;
if(netbuf_data(buf, (void**)&p_data, &len) == ERR_OK)
{
if(pPort->Write(p_data, len, 2000) != len)
{
TerminateFlag = 1;
}
if(TerminateFlag)break;
}
}while(netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
}
Столкнулся с такой проблемой когда закрываю соединение из другого потока функцией netconn_close() то читающий поток остается висеть в netconn_recv пока не выйдет по таймауту. Есть какой-небудь "легальный" способ решить проблему? А то пока приходит в голову только вариант вручную отправить сообщение в очередь conn->recvmbox.