你的問題不是很詳細如果是不知道位置:在LWIP的tcp_active_pcbs==tcp_active_pcbs->next如果是非阻塞的方式執行:現在的用法,還是用sys_thread_new建立的,在tcpclient中這樣處理的,但連線如果是server主動斷掉可以檢測到,但如果是其他原因,如網路錯誤之類的就檢測不到了。int fd; FD_ZERO(&fdR); FD_SET(sock, &fdR); switch (select(sock + 1, &fdR, NULL,NULL, &timeout)) { case -1: { lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } case 0: break; default: { if(FD_ISSET(fd,&fdR)) { int nread; ioctlsocket(fd,FIONREAD,&nread); if(nread == 0) { //close lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } else { bytes_received = recv(sock, recv_data, 1024, 0); if(bytes_received == 0) { //close lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } else { recv_data[bytes_received] = "\0"; //*****資料解析******* if(Check_frame(recv_data) == 1) { link((u8_t *)recv_data,sock); } } } } break; } }
你的問題不是很詳細如果是不知道位置:在LWIP的tcp_active_pcbs==tcp_active_pcbs->next如果是非阻塞的方式執行:現在的用法,還是用sys_thread_new建立的,在tcpclient中這樣處理的,但連線如果是server主動斷掉可以檢測到,但如果是其他原因,如網路錯誤之類的就檢測不到了。int fd; FD_ZERO(&fdR); FD_SET(sock, &fdR); switch (select(sock + 1, &fdR, NULL,NULL, &timeout)) { case -1: { lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } case 0: break; default: { if(FD_ISSET(fd,&fdR)) { int nread; ioctlsocket(fd,FIONREAD,&nread); if(nread == 0) { //close lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } else { bytes_received = recv(sock, recv_data, 1024, 0); if(bytes_received == 0) { //close lwip_close(sock); rt_free(recv_data); recv_data = RT_NULL; GPIOB->BSRR = GPIO_Pin_5;//滅燈 return 0; } else { recv_data[bytes_received] = "\0"; //*****資料解析******* if(Check_frame(recv_data) == 1) { link((u8_t *)recv_data,sock); } } } } break; } }