被send()返回error=11折磨

mengsg
Posts: 2
Joined: Wed May 04, 2022 3:09 am

被send()返回error=11折磨

Postby mengsg » Fri May 06, 2022 3:18 am

代码如下,使用send()发送一段时间,在室内只要网络稍微一差就会出现error=11,例如网络ping值大于100ms就会出现,即使ping值恢复到10ms以内,也恢复不了。已经被这个问题折磨了好久 :( :( :(
  1. int tcpServerPublish(int sock, const uint8_t *data, size_t len)
  2.   {
  3.     if (sock == INVALID_SOCK)
  4.       return -1;
  5.     int to_write = len;
  6.  
  7.     int last_errno = 0;
  8.     int try_send_cnt = 0;
  9.     while (to_write > 0)
  10.     {
  11.       int written = send(sock, data + (len - to_write), to_write, MSG_DONTWAIT);
  12.       if (written < 0)
  13.       {
  14.         if (errno != EINPROGRESS && errno != EAGAIN && errno != EWOULDBLOCK && errno != EINTR)
  15.         {
  16.           if (errno != last_errno)
  17.           {
  18.             last_errno = errno;
  19.             ESP_LOGE(TAG, "%s(%d),[sock=%d]: Error occurred,error=%d", __func__, __LINE__, sock, errno);
  20.           }
  21.           return -1;
  22.         }
  23.         else
  24.         {
  25.           if (errno != last_errno)
  26.           {
  27.             last_errno = errno;
  28.             ESP_LOGW(TAG, "%s,[sock=%d]: Error occurred  ,error=%d", __func__, sock, errno);
  29.           }
  30.           vTaskDelay(pdMS_TO_TICKS(10));
  31.           if (try_send_cnt++ > 10)
  32.           {
  33.  
  34.             ESP_LOGE(TAG, "%s,[sock=%d]: Error occurred  ,error=%d", __func__, sock, errno);
  35.             return -2;
  36.           }
  37.         }
  38.       }
  39.       else
  40.       {
  41.         // todo
  42.         // send success
  43.         to_write -= written;
  44.         ESP_LOGD(TAG, "send %d bytes,last %d", written, to_write);
  45.         try_send_cnt = 0;
  46.       }
  47.     }
  48.  
  49.     return len;
  50.   }
  51.  
Attachments
2022-05-17 11-45-15屏幕截图.png
2022-05-17 11-45-15屏幕截图.png (280.65 KiB) Viewed 2144 times
Last edited by mengsg on Tue May 17, 2022 4:16 am, edited 1 time in total.

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

Re: esp32 做为tcp server 发送一段时间会出现error11

Postby ESP_YJM » Mon May 09, 2022 3:00 am

我使用了你的代码,没有发现问题。可以提供复现方法和 log。

mengsg
Posts: 2
Joined: Wed May 04, 2022 3:09 am

Re: esp32 做为tcp server 发送一段时间会出现error11

Postby mengsg » Tue May 10, 2022 8:41 am

感谢回复和试验,我后面再贴上来,

YouCan
Posts: 1
Joined: Fri May 20, 2022 3:04 am

Re: 被send()返回error=11折磨

Postby YouCan » Fri May 20, 2022 3:08 am

我也经常遇到这个问题,在网络不佳的情况下,经常出现

ESP_YJM
Posts: 300
Joined: Fri Feb 26, 2021 10:30 am

Re: 被send()返回error=11折磨

Postby ESP_YJM » Fri May 20, 2022 9:39 am

errno 11 可以代表 ERR_TIMEOUT,网络不好的时候,如果设置了接收超时,是会出现该问题的。

Who is online

Users browsing this forum: No registered users and 41 guests