⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcast.c

📁 一个C编写网络广播的程序
💻 C
字号:
/* mcast.c -- multicast socket setup routines *   * This file is part of 'netcast' program, released under BSD License.  * (c) 2001-2002 Stanis砤w Pa秌o <staszek@nutki.com>. All rights reserved.    */#include <fcntl.h>#include <net/if.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include "mdist.h"#include "mcast.h"#include "util.h"//! const -- reuse sockets ?int msock_reuse = 1;//! const -- loop mcast packets ?u_char msock_loop = MCAST_LOOP;//! const -- multicast hop limitu_char msock_ttl = MCAST_TTL; /*! gs - packed group address. (Uses port and addr fields) !*/int init_mcast_socket(struct sockaddr_in *gs) {  struct ip_mreq mreq;                            /* multicast request */  int ms;                                         /* multicast socket */  struct sockaddr_in sin;                         /* address for bind */  u_short msock_port;                             /* port. taken from gs */    msock_port=ntohs(gs->sin_port);  sin = make_addr(0,msock_port);      if ((ms = socket(PF_INET, SOCK_DGRAM, 0)) < 0)    crit("socket() failed, error allocating multicast socket");  if (setsockopt(ms,SOL_SOCKET,SO_REUSEADDR,&msock_reuse,sizeof(msock_reuse)) < 0)    MSG(2,"setsockopt() failed, can't set reuse flag");   if ( bind(ms, (struct sockaddr*) &sin, sizeof(sin)) < 0)    crit("bind() error, can't bind mcast socket");    if (setsockopt(ms,IPPROTO_IP,IP_MULTICAST_TTL,&msock_ttl,sizeof(msock_ttl)) < 0)    MSG(2,"setsockopt() failed, can't set ttl value");  if (setsockopt(ms,IPPROTO_IP,IP_MULTICAST_LOOP,&msock_loop,sizeof(msock_loop)) < 0)    MSG(2,"setsockopt() failed, can't set multicast packet looping");  mreq.imr_interface.s_addr = INADDR_ANY;  mreq.imr_multiaddr = gs->sin_addr;  MSG(4,"Using multicast address: %s:%d",inet_ntoa(mreq.imr_multiaddr),msock_port);    if (setsockopt(ms,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0)    crit("setsockopt() failed, can't join multicast group");       return ms;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -