我需要找出本地网络中某些设备的IP,以便我发送广播消息并等待响应,这是常见的方法。所有这些都发生在移动设备上:iOS或Android。该模块是用C编写的。 伪代码:
关闭插座。
问题是-当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;
}
将感谢您的任何想法