728x90

멀티캐스트

- 멀티 캐스트는 그룹으로 관리되어 서버에서 데이터를 한번만 전송하면 그룹에 속하는 클라이언트가 데이터를 수신

- 멀티 캐스트로 전송하는 데이터를 받기 위해서는 그룹에 가입해야 함

- 멀티 캐스트는 연결의 개념이 아니기 때문에 UDP 기반으로 전송

- 라우터들에 의해 복사되어 전송

- 그룹 가입 후 recv

int main(int argc, char *argv[])
{
	int recv_sock;
	struct sockaddr_in adr;
	struct ip_mreq join_adr;
	
	recv_sock=socket(PF_INET, SOCK_DGRAM, 0);
	...;
	join_adr.imr_multiaddr.s_addr=inet_addr(argv[1]);		// 가입할 그룹 주소
	join_adr.imr_interface.s_addr=htonl(INADDR_ANY);		// 본인의 주소
  	
	setsockopt(recv_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)&join_adr, sizeof(join_adr));
  
	while(1)
	{
		str_len=recvfrom(recv_sock, buf, BUF_SIZE-1, 0, NULL, 0);
		if(str_len<0) {	break; }
		buf[str_len]=0;
		fputs(buf, stdout);
	}
	close(recv_sock);
	return 0;
}

 

 

TTL

- 패킷의 수명. 패킷을 언제 소멸시킬지 결정하는 수치

- 라우터를 거칠때마다 1씩 감소되어 0이되면 해당 패킷은 소멸됨

- TTL을 설정하는 법은 setsockopt 함수를 이용

int send_sock;
int time_to_live = 64;

send_sock=socket(PF_INET, SOCK_DGRAM< 0);		// UDP 소켓
setsockpet(send_sock, IPPROTO_IP, IP_MULTICAST_TTL, (void*)&time_to_live, sizeof(time_to_live);

 

728x90

+ Recent posts