UDP套接字不接收广播请求的响应

时间:2018-08-15 04:11:37

标签: ios c unix broadcast unix-socket

我需要找出本地网络中某些设备的IP,以便我发送广播消息并等待响应,这是常见的方法。所有这些都发生在移动设备上:iOS或Android。该模块是用C编写的。 伪代码:

  1. 打开套接字,配置
  2. 发送广播请求
  3. 接收回复
  4. 关闭插座。

    问题是-当iOS设备休眠一段时间后,在我运行搜索后,没有任何响应。广播消息仍会发送到网络(已通过Wireshark检查)。另外,我认为搜索到的设备可以正常工作(因为可以从其他智能手机中找到它们)。 当我断开与当前Wi-Fi的连接并重新连接时,问题就解决了。

以下是套接字选项:

int setup_socket( void ) {
    int sck = socket( AF_INET, SOCK_DGRAM, 0 );
    if (sck < 0)
        return -1;

    int bcast = 1;
    if ( 0 > setsockopt( sck, SOL_SOCKET, SO_BROADCAST, &bcast, sizeof( bcast ) ) ) {
        return -1;
    }

    struct timeval tv = {
        .tv_sec = 0,
        .tv_usec = 100 * 1000,
    };

    if ( 0 > setsockopt( sck, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof( tv ) ) ) {
        return -1;
    }

    return sck;
}

将感谢您的任何想法

0 个答案:

没有答案