Network code notes

UDP报文接收BUF长度小于实际报文长度,剩余的会被丢弃。


发送广播时需要设置:
    int option = 1;
    setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &option, sizeof(option));

接收组播时需要加入组:
    /* join ipv4 group */
    struct ip_mreq mreq;
    mreq.imr_multiaddr.s_addr = inet_addr(NT_GROUP_ADDR_IPV4);
    mreq.imr_interface.s_addr = htonl(INADDR_ANY);
    setsockopt(listenFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
    
    /* join ipv6 group */    
    struct ipv6_mreq mreq6;
    inet_pton(AF_INET6, NT_GROUP_ADDR_IPV6, &mreq6.ipv6mr_multiaddr);
    mreq6.ipv6mr_interface = htonl(INADDR_ANY);
    setsockopt(listenFd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP,(char *)&mreq6,sizeof(mreq6));

IPv6监听socket默认同时接受ipv4和ipv6连接,bind会失败,绑定前要设置只接受IPv6连接:
    int option = 1;
    setsockopt(listenFd, IPPROTO_IPV6, IPV6_V6ONLY, &option, sizeof(option));
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值