(toppers-users 4003) Re: TINETのマルチキャスト送受信について教えてください。

高橋和浩@nifty takahashi_kazuhiro @ nifty.com
2012年 7月 18日 (水) 15:12:02 JST


お世話になります。

環境について、ざっくりしすぎていたので確認したバージョン等の追記と
linuxのテスト用のプログラムも添付しておきます。

環境
TOPPERS JSP 1.4.4 Full
TINET 1.5.2 (jsp用)


テストプログラム--------------------------------------------------------------------
//--------------------------------------------------------------------------
//	ipv6 udp multicast test program
//	Fedora Core5 にて動作確認済み
//	2012.07.18 alive vision software KK
//---------------------------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<errno.h>


#define TPORT 5353
int main(int argc,char *argv[])
{
  	int destSocket;
  	static const int kOn = 1;
  	int err;
  	unsigned int ifindex;
  	struct sockaddr_in6 destSockAddr;
  	char buffer[128];

  	if(argc != 2)
	{
                fprintf(stderr, "Usage: # strings\n");
                exit(1);
  	}

  	if((destSocket=socket(AF_INET6,SOCK_DGRAM,0))==-1)
    	{
      		perror("can not create socket ");
      		exit(1);
    	}
	err = setsockopt(destSocket, SOL_SOCKET, SO_REUSEADDR, &kOn, sizeof(kOn));
	if (err < 0)
	{
		printf("SOL_SOKECT err = %d\n",err);
		exit(1);
	}
	ifindex = if_nametoindex("eth0");
    	setsockopt(destSocket, IPPROTO_IPV6, IPV6_MULTICAST_IF, &ifindex,
          sizeof(ifindex));


	memset(&destSockAddr,0, sizeof(struct sockaddr_in6));
	destSockAddr.sin6_family      = AF_INET6;
	destSockAddr.sin6_port        = htons(5353);
	destSockAddr.sin6_flowinfo    = 0;
	destSockAddr.sin6_addr        = in6addr_any; 
	destSockAddr.sin6_scope_id    = 0;
	err = bind(destSocket, (struct sockaddr *) &destSockAddr, sizeof(struct sockaddr_in6));
	if (err < 0) 
	{ 
		err = errno; 
		perror("bind"); 
		fflush(stderr); 
	}

  	memset(&destSockAddr, 0, sizeof(destSockAddr));
  	destSockAddr.sin6_family	=	AF_INET6;
  	destSockAddr.sin6_port		=	htons(TPORT);
//  inet_pton(AF_INET6,"fe80::202:cbff:fe01:7b5c",&(destSockAddr.sin6_addr));
  	inet_pton(AF_INET6,"ff02::FB",&(destSockAddr.sin6_addr));

  	strcpy(buffer, argv[1]);
  	if((err=sendto(destSocket,buffer, sizeof(buffer),0,(struct sockaddr *)&destSockAddr,sizeof(destSockAddr))) == -1)
    	{
      		perror("sendto ");
      		fprintf(stderr,"sendto() returned %d\n",err);
      		close(destSocket);
      		exit(1);
    	}

  	close(destSocket);

  	return 0;

----------------------------------------------------------------------

}
On Wed, 18 Jul 2012 13:34:31 +0900
阿部 司 <abe @ jo.tomakomai-ct.ac.jp> wrote:

> アライブビジョンソフトウエア 高橋様、皆様
> 
> 苫小牧高専の阿部です。
> 
> > 阿部先生、MLの皆様
> > お世話になっております。アライブビジョンソフトウエアの高橋です。
> >
> > tinetのマルチキャスト受信のほうですが、少し時間がかかっていましたが、
> > なんとかできるようになりました。
> > tinetのソースを「変更部分」のように変更すれば受信可能になりました。
> > あまり、役に立つ情報でもないかもしれませんが、一応情報としてあげておきます。
> >
> >
> 
> 十分に役に立つ情報です。ありがとうございます。
> 次回のリリースに含めたいと思います。
> 
> 今後ともよろしくお願いいたします。
> 
> -- 
> .\" 苫小牧工業高等専門学校 情報工学科 教授 阿部 司
> .\" 〒059-1275 北海道苫小牧市字錦岡443番地
> .\" E-mail: abe @ jo.tomakomai-ct.ac.jp  TEL/FAX: 0144-67-8937
> 
---
アライブビジョンソフトウエア株式会社
高橋和浩
673-0005兵庫県明石市小久保2-2-7幹線ビル4F
Email:takahashi_kazuhiro @ nifty.com
http://homepage3.nifty.com/ALVS/