멀티캐스트(udp방식)
브로드캐스트(udp방식)
TTL(time to live)
int send_sock;
int time_live = 64;
send_sock = socket(PF_INET, SOCK_DGRAM, 0);
//TTL의 설정과 관련된 프로토콜의 레벨은 IPPROTO_IP, 옵션의 이름은 IP_MULTICAST_TTL
setsockopt(send_sock, IPPROTO_IP, IP_MULTICAST_TTL, (void*) &time_live, sizeof(time_live));
TTL = 패킷을 얼마나 멀리 전달할 것인가 결정하는 요소
라우터를 하나 거칠 때마다 1씩 감소, 값이 0이 되면 패킷은 더 이상 전달되지 못하고 소멸
멀티캐스트 그룹으로의 가입
그룹가입과 관련된 프로토콜의 레벨은 IPPROTO_IP, 옵션의 이름은 IP_ADD_MEMBERSHIP
int recv_sock;
struct ip_mreq join_adr;
recv_sock = socket(PF_INET, SOCK_DGRAM, 0);
join_adr.imr_multiaddr.s_addr = "멀티캐스트 그룹의 주소정보";
join_adr.imr_interface.s_addr = "그룹에 가입할 호스트의 주소정보";
setsockopt(recv_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*) &join_adr, sizeof(join_adr));
struct ip_mreq
{
struct in_addr imr_multiaddr; //가입할 그룹의 ip주소
struct in_addr imr_interface; //그룹에 가입하는 소켓이 속한 호스트의 ip주소
}
브로드캐스트의 구현시 필요한 설정
int bcast = 1; //SO_BROADCAST의 옵션정보를 1로 변경하기 위한 변수 초기화
send_sock = socket(PF_INET, SOCK_DGRAM, 0);
setsockopt(send_sock, SOL_SOCKET, SO_BROADCAST, (void*) &bcast, sizeof(bcast));
윈도우
헤더파일 ws2tcpip.h 추가
옵션 IP_MULTICAST_TTL과 구조체 ip_mreq의 선언시 필요