函数
int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);
【注】
以上几种消息发送方式均需注册套接字选项,不能直接向诸如"255.255.255.255"的广播地址发送消息。
以组播为例,D类IP地址用于多点广播,假设我们以"224.2.2.2"作为多播组,那么需要进行如下注册:
struct ip_mreqn mreq;
inet_pton(AF_INET, MULTGROUP, &mreq.imr_multiaddr);
inet_pton(AF_INET, "0.0.0.0", &mreq.imr_address);
mreq.imr_ifindex = if_nametoindex("ens33");
if(setsockopt(sfd, IPPROTO_IP, IP_MULTICAST_IF, &mreq, sizeof(mreq)) < 0)
{
perror("setsockopt()");
close(sfd);
exit(1);
}
setsockopt()
的第二个参数是选择位于哪个套接字层/IP层,optname代表具体操作,UNP第七章《套接字选项》中可查。