论坛用户154882 发表于 2023-6-20 17:28:40

android13的C语言的select超时无效果

OPPO K9s ColorOS13 ,android 13系统APP结合JNI开发,在使用select函数等待socket变化时,发现如果网络断开之后,超时(超时设置为2秒)没有生效,select函数一直处于阻塞状态
当网络恢复,也一是直阻塞状态,直到熄屏再唤醒之后,才恢复正常,测试过其它品牌的android 13和oppo 其它机型的android 11没有发现有此问题

       int rc, max_sock = 0;
      fd_set socket_mask;
      struct timeval wait_time;
      time_t now;
      FD_ZERO(&socket_mask);

      FD_SET(eee->udp_mgmt_sock, &socket_mask);
      max_sock = eee->udp_mgmt_sock;

      if(eee->sock >= 0) {
            FD_SET(eee->sock, &socket_mask);
            max_sock = max(eee->sock, eee->udp_mgmt_sock);
      }
#ifndef SKIP_MULTICAST_PEERS_DISCOVERY
      if(eee->conf.allow_p2p) {
            FD_SET(eee->udp_multicast_sock, &socket_mask);
            max_sock = max(eee->sock, eee->udp_multicast_sock);
      }
#endif

#ifndef WIN32
      FD_SET(eee->device.fd, &socket_mask);
      max_sock = max(max_sock, eee->device.fd);
#endif

      wait_time.tv_sec = (eee->sn_wait) ? (SOCKET_TIMEOUT_INTERVAL_SECS / 10 + 1) : (SOCKET_TIMEOUT_INTERVAL_SECS);
      wait_time.tv_usec = 0;

      rc = select(max_sock + 1, &socket_mask, NULL, NULL, &wait_time);

论坛用户154882 发表于 2023-6-21 11:45:02

已查到原因

论坛用户154882 发表于 2023-6-21 15:42:09

开启 允许完全后台行为 就没有这个问题
页: [1]
查看完整版本: android13的C语言的select超时无效果