68user's page 掲示板

Prev< No. 4603〜4604> Next  [最新発言に戻る] [過去ログ一覧]
No. 4603 # 68user 2006/05/13 (土) 19:47:43
>>4602 68user
> アプリ側で対応する、つまり TCP で接続しつつ、ICMP のエラーを解析という
> ことが可能かどうかはやったことがないのでわかりませんが、少なくとも ftp や
> telnet という基本的なアプリがそういう小細工をしている可能性は低いと思います。
ICMP のエラーを解析する必要はなかったですね。connect(2) が -1 を返したとき
EHOSTUNREACH なら再接続、などとすればアプリ側で対応できます。

とはいえ、やはり ftp や telnet がそういうことをする必然性はないと思います。

No. 4604 # COM 2006/05/16 (火) 18:01:08
はじめまして。ネットワークプログラムについて質問させてください。
リミテッドブロードキャスト(255.255.255.255へ)を行いたいのですが、sockaddr_in
のアドレス部分に上記を入れても、何故かディレクテッドブロードキャスト(私の環境
では 192.168.1.255 )になってしまいます。正しくリミテッドブロードキャストする
方法はないでしょうか。setsockopt でブロードキャストのフラグを立てる、などは
行っています。環境は FreeBSD & gcc です。
以下、重要部分の抜粋です(エラー処理などは省いています)。

struct sockaddr_in addr;
int broadcast = 1;
char buf[] = "test";
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr("255.255.255.255");
addr.sin_port = htons(2000);
sock = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
setsockopt( sock, SOL_SOCKET, SO_BROADCAST, (char*)&broadcast, sizeof(broadcast) );
sendto( sock, buf, sizeof(buf), 0, (struct sockaddr*)&addr, sizeof(struct sockaddr) );

ごく普通のコードだと思うのですが、パケットをモニターすると、送り先アドレスが
ディレクテッドブロードキャストになってしまっています。アドバイスだけでもいいので
助言いただけるとうれしいです。

Prev< No. 4603〜4604> Next  [最新発言に戻る] [過去ログ一覧]