(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/