GCDAsyncUdpSocket修改TTL,不修改源码

GCDAsyncUdpSocket三方库很好用,而且是开源的。
使用GCDAsyncUdpSocket发送组播数据,默认TTL为1,想要修改为4,但是又不能改源码,因为不知道其他地方有没有改成其他的值,所以,研究了一下,通过下面的方法,即可修改。

self.udpWfgSocket = [[GCDAsyncUdpSocket alloc] init];
[self.udpWfgSocket setDelegate:self];
[self.udpWfgSocket setDelegateQueue:dispatch_get_main_queue()];
// 启动广播
[self.udpWfgSocket enableBroadcast:YES error:&error];
if (error != nil) {
    dlogE(@"enable broadcase fail: %@", [error localizedDescription]);
    [self.udpWfgSocket close];
    self.udpWfgSocket = nil;
    return ;
}
// 设置TTL
__block typeof(self) bself = self;
[self.udpWfgSocket performBlock:^{
    char mcttl = 4;
    int setttlok = 0;
    int misfd = [bself.udpWfgSocket socketFD];
    setttlok = setsockopt(misfd, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&mcttl, sizeof(mcttl));
    if (setttlok != 0) {
        dlogE(@"set socket ttl fail: %d", setttlok);
        [bself.udpWfgSocket close];
        bself.udpWfgSocket = nil;
        return ;
    }
}];

要访问GCDAsyncUdpSocket对象中的socket,必须要在performBlock方法中才可以,否则就获取不到socket实例。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,467评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,251评论 4 61
  • 不知道从什么时候开始, 我们经常带着面具, 扮演着各种各样不同的角色, 很多时候都做不了真实的自己。 那些曾经的伙...
    女王殿下1884阅读 205评论 0 0
  • 学到了什么? 1.成长路上对自己的定位 2.《超级个体》的学习 6个工具卡,6本书,以及对能力、职业的新认知,刷新...
    翻滚的小也阅读 191评论 2 0
  • 【1】说话是一件难事 说了一辈子的话未必说的了好话。大处说,一言可以兴邦,一言也可以丧邦。往小的说,说的好可以升职...
    Nathandad大叔阅读 629评论 1 50