首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IP_MULTICAST_IF的默认值

IP_MULTICAST_IF的默认值
EN

Stack Overflow用户
提问于 2012-03-26 17:34:45
回答 2查看 2.8K关注 0票数 1

我正在尝试弄清楚,在设置新套接字之后,IP_MULTICAST_IF选项使用的默认值是什么。不幸的是,我的代码分段错误,我真的不知道为什么?!我是不是做错了什么,或者如何获得IP_MULTICAST_IF选项的默认值?

代码语言:javascript
复制
  int sock;
  struct in_addr interface_addr;
  int addr_size;

  if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
    perror("socket() failed");
  }

  addr_size = sizeof(interface_addr);

  if ((getsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, &addr_size)) <  0) {
    perror("getsockopt() failed");
  }

  printf("The default interface is %s\n", inet_ntoa(interface_addr));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 23:36:23

是我的错,我的代码没有包含。使用

代码语言:javascript
复制
#include <arpa/inet.h>

它工作得很好。

票数 0
EN

Stack Overflow用户

发布于 2012-03-26 18:09:47

阅读适用于您的平台的ip(7)手册页。IP_MULTICAST_IF不接受给出一个struct in_addr

在Linux上:

IP_MULTICAST_IF (从Linux1.2开始)为多播套接字设置本地设备。参数是类似于IP_ADD_MEMBERSHIP的ip_mreqn或ip_mreq结构。传递无效套接字选项时,将返回ENOPROTOOPT。IP_ADD_MEMBERSHIP (从Linux1.2开始)加入组播组。参数是一个ip_mreqn结构。struct ip_mreqn { struct in_addr imr_multiaddr;/* IP组播组地址*/ struct in_addr imr_address;本地接口的/* IP地址*/ int imr_ifindex;/*接口索引*/ };imr_multiaddr包含应用程序要加入或离开的组播组的地址。它必须是有效的多播地址(否则setsockopt(2)失败并显示错误EINVAL)。imr_address是系统用来加入多播组的本地接口的地址;如果它等于INADDR_ANY,则由系统选择合适的接口。imr_ifindex是应该加入/离开imr_multiaddr组的接口的接口索引,或0表示任何接口。ip_mreqn结构仅在Linux2.2之后才可用。为了兼容性,仍然支持旧的ip_mreq结构(从Linux1.2开始存在);它与ip_mreqn的不同之处只是不包括imr_ifindex字段。仅作为setsockopt(2)有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9869732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档