We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
HiI encounter a strange problem that the netTCP_SendReady gives false forever even the TCP connection is established. Is there a way to find out why the connection is not ready?
while(is_sending_request) { switch (netTCP_GetState(socket)) { case netTCP_StateUNUSED: case netTCP_StateCLOSED: // Connect to TCP socket server netTCP_Connect(socket, addr, 0); break; case netTCP_StateESTABLISHED: // Connected, send the data if (netTCP_SendReady(socket) == true) { uint32_t mss = netTCP_GetMaxSegmentSize(socket); send_len = (mss > needed_len) ? needed_len : mss; uint8_t * sendbuf; sendbuf = netTCP_GetBuffer(send_len); strlcpy((char*) sendbuf, (char*) str, send_len); netStatus status = netTCP_Send(socket, sendbuf, send_len - 1); if(status != 0) { printf("TCP send error:%d\n",status); } chars_sent = ((int32_t) send_len) - 1; is_sending_request = false; }else { printf("waiting\n"); } break; default: break; }
Check your thread priorities. It looks like your thread has a higher priority than the network core thread. Thus, the network never gets a chance to update its state. This is a typical RTX thread deadlock. You can try adding osDelay(10) to the loop. This will trigger cooperative thread switching.