68user's page 掲示板

Prev< No. 1584〜1684> Next  [最新発言に戻る] [過去ログ一覧]
No. 1584 # arche 2001/01/17 (水) 13:54:46
はじめまして。
突然何? という感じかもしれませんが、このサイトは非常にすばらしいと思います。
自分はPerl屋なのですが、ここほど為になるサイトは今まで見たことがありません。
HTTPクライアントは特に参考になりました。
ありがとうございます。
すばらしい情報が得られる貴重なサイトですね。

あまりの感動につい書き込んでしまいました。
掲示板の趣旨に反していましたら、お詫び致します。

No. 1585 # E田 2001/01/17 (水) 15:26:56
みなさん、回答をありがとうございます。
やってみて、うまく格納できているみたいです。
今は、read()の方をうまくできていないので、ちゃんと
受け取りの構造体に格納できないので、これからなんとか
受け取り側で見れるようにします。
でも、うまくCを書けていなかったのがわかりました。
本当にありがとうございました。

No. 1586 # YAGI [E-mail] 2001/01/17 (水) 17:45:54
以前は、uptimeの質問に対してレスありがとうございました
また、質問があるのですが、
現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。
今回、NISを設定してあるもののバージョンを上げるために、一度NISの設定
を解除して、バージョンをあげて、再設定しようと思っています。
一度試しで行なって見たのですが、Clientのほうで、Server側でマップを更新した後に、ログインができなくなってしまったのです。
(whoamiコマンドで反応がなくなってしまいます)
それで、一度NISを外しまして、再設定を行なった際に、
マップの更新後に、stopsrc -s ypbind
startsrc -s ypbind -a "ypsetme"
ypset (ServerのIPアドレス)
を行なったところ、無事に設定する事が出来ました。

ここで、質問なのですが、今度違う場所で同じ作業があるのですが、
マップ更新後に、whoamiコマンドで行けるか確認して
stopsrc…などのコマンドを打って設定する他にいい方法があるのでしょうか?

私的にはNISの解除の方法がおかしいのかなと思っています。
(1./etc/passwdを戻す、2.smitでNISを解除する)

よろしければ、皆様のご意見を頂きたく思います。
都合上レスが明日になるかもしれませんがよろしくお願い致します

No. 1587 # mak(spriggan [E-mail] 2001/01/17 (水) 18:52:58
初めまして。
現在UNIXでのSocket通信プログラムを書いているのですが
selectシステムコールとFD_ISSETマクロとの
関係がよくわからずにコードを書いていたところ
バグに悩まされています。

select()を使いタイマで割り込み動作を監視しながら
recv()で受信を行うというプログラムを書いています

FD_ZERO( &fdset );
FD_SET( m_Sockfd, &fdset );
while(recv_size != 0)
{
      work_fdset = fdset;

      ret = select( 64, &work_fdset, NULL, NULL, &time_out );

      if( ret == -1)
      {
            異常処理
      }
===============================
      割り込み監視
===============================
      
      if( FD_ISSET( m_Sockfd, &work_fdset ))
      {
            data_size = recv( m_Sockfd, (void*)(m_pData + m_DataSize))
      }

      m_DataSize += data_size;
      recv_size -= data_size;
}

ソースはだいたいこのような感じなのですが、
割り込み監視部分等でコネクションの切断
コネクションの再接続等を行っていると

select()の返り値は0でタイムアウトなのですが
FD_ISSET()マクロの方は返り値が真になってしまい
recv()の発行を行うけれども実際はデータはきておらず
recv()で処理がとまってしまい、割り込みの監視ができなくなって
しまうというようなバグが発生しています。
ならばselectとFD_ISSETの返り値が真である場合にのみ
recv()を発行すればよいと思うのですが
なぜこういうケースがでるのかわからなければ
信用し得る修正にならないので書きこみさせてもらいました。

過去ログなどを検索して調べてみましたが
自分なりのなっとくいく回答がえられませんでした。
よければこういうケースになる条件、回避方法等
お教えいただければと思います。

No. 1588 # mak(spriggan [E-mail] 2001/01/17 (水) 19:14:23
追記ですが、下記のプログラムは
1ポート1コネクションのプログラムです

No. 1589 # CoreFighter 2001/01/17 (水) 21:02:47
>>1553 CoreFighter
> CoreFighter さんへ。質問に対する回答をもらっても、
> 何の反応も示さないなら、質問するのはご遠慮下さい。
すいませんでした。以後気をつけます。

No. 1590 # mak(spriggan [E-mail] 2001/01/17 (水) 22:12:52
自己回答。先ほど質問を書きこんだものですが、
あれからいろいろサイトなどを再びまわって
間違いに気づきました。
お騒がせしました。
ようは
1ポート1コネクションなら
select()の第一引数に取得したソケット記述子+1を指定すれば
よかったんですね。

No. 1591 # 68user 2001/01/18 (木) 01:32:24
>>1590 mak(spriggan
> 1ポート1コネクションなら select()の第一引数に取得した
> ソケット記述子+1を指定すればよかったんですね。
ん〜、
    ret = select( 64, &work_fdset, NULL, NULL, &time_out );
であっても、事前に FD_ZERO(&fdset); FD_SET(m_Sockfd,&fdset);
してるんだから、select は m_Sockfd しかチェックしないと
思うんだけどなぁ…。

あと気になるのは、select が 0 を返したとき、FD_ISSET 得られる
値は有効な値なのかかどうか (select が 0 を返したときは FD_ISSET
してはいけないのではないか)、ってところですけど、どうなんでしょう。

>>1586 YAGI
> 現在サーバ間(UNIX/AIX)でNISの設定をしようとしています。
僕は NIS の設定をしたことがないので、ちょっとわかりません。

>>1582 たろ
> マルチパートかシングルパートか、でした。失礼しました。
なるほど。で、
>>700 68user
はどうでしたか。僕は multipart をばらすところまでしか
やってませんので、(必要かどうかわかりませんが) 編集後に
再構成できるのかはわかりません。
# まぁ、できなくはないと思いますけれど。

>>1584 arche
> 自分はPerl屋なのですが、ここほど為になるサイトは今まで
> 見たことがありません。
どもです。ですが、http://www.din.or.jp/~ohzaki/perl.htm くらい
役立つレベルになりたいものです。

No. 1592 # バス酔いで思わずコアダンプ 2001/01/18 (木) 05:15:41
変な名前ですいません。
SystemVと呼ばれるOSがあるそうなのですが、
'システムブイ'か、'システムファイブ'
どちらが正しい言い方なんでしょう?

No. 1593 # 68user 2001/01/18 (木) 09:08:12
>>1592 バス酔いで思わずコアダンプ
SystemIII の後継なので、システムファイブです。個人的には
話すときはシスブイと呼びますし、一応まわりには通じているようですが、
世間一般の人にシスブイと言ってわかってもらえるかは謎です。

# 検索すると http://www.system-v.org/ ってのが引っかかった。

No. 1594 # たろ 2001/01/18 (木) 11:38:15
>>1591 68user
>はどうでしたか。僕は multipart をばらすところまでしか
> やってませんので、(必要かどうかわかりませんが) 編集後に
> 再構成できるのかはわかりません。
どうもです。
MIME-TOOLSのexampleを見て、今手探り中です。
一度、multipart をばらして、対象のテキストパートから数えた行数を
取得後、multipartをばらしていない本文より行数を取ろうと思います。
ばらしたものよりの再構成は、(むずかしそうなので)とりあえず避けます。

No. 1595 # じゅじゅ [E-mail] 2001/01/18 (木) 15:09:55
今課題で、UNIXにApacheを入れ、フリーの掲示板をダウンロードして
とりつける課題をしています。
しかし、ウィンドウズで作られたperlのプログラムなので改行コード
の違いからか、エラーが出てInternal Server Error が出ます。
ダウンロードしたプログラムをperlで動かしてみても
Illegal character \015 (carriage return) at aska.cgi line 2.
(Maybe you didn't strip carriage returns after a network transfer?)
といった、エラーが出ます。どうしたらよいでしょう。

No. 1596 # クーロン 2001/01/18 (木) 17:16:12
cronを実行していたのですが、
マシンの時間を修正した後、cronが実行されなくなりました。
何が原因か、どうすれば実行するようになるのか、
どうか教えていただきたいです。

No. 1597 # クーロン 2001/01/18 (木) 17:20:53
cronを実行していたのですが、
マシンの時間を変更した後、
実行されなくなってしまいました。
どうしたらよいのでしょうか?

No. 1598 # 68user 2001/01/18 (木) 17:50:39
>>1595 じゅじゅ
> 今課題で、UNIXにApacheを入れ、フリーの掲示板を
> ダウンロードしてとりつける課題をしています。
最近どうして こんな変なのばっかりわいてくるんだろう。
マルチポストする人はさようなら。

>>1596 クーロン
> cronを実行していたのですが、
理由はわかりませんが、cron daemon を再起動するのがお手軽で
しょう。特にサーバマシンに言えますが、なるべく時刻は date や
ntpdate を使わず、xntpd などで設定しましょう。

No. 1599 # キチキチ 2001/01/18 (木) 18:17:11
はじめまして。
UNIXのことあんまり知らない初心者のものです。
先日TELNETが使えるレンタルサーバを借りたはいいけど、なんとその2週間後!
TELMETが禁止に、、、ってことで、ついでにCORNTABも禁止に。。。
こんな悲しいことってアリッ!!?TELNETが使えるから借りたのに!!!ガビーーン!
・・・ぐちっぽくなってゴメンなさい。
そんなこんなで、質問をさせてください。
TELNETが禁止のサーバで、CRONTABみたいに定期的にパールスクリプト実行できるテクニックってありますか?
よい方法を知っている方がいたら、なにとぞ教えてくださいませ☆

No. 1600 # じゅじゅ 2001/01/18 (木) 19:33:43
ごめんなさい、マルチポストの意味がよく
わかりません。とりあえず、ご迷惑をおかけしたようなので
他のところへ聞いてみたいと思います。
もう来ませんので許してください。
悪気は一つもなかったんですから。

No. 1601 # rererenore 2001/01/18 (木) 21:28:32
>>1577 rererenore
>さようなら、断りなしにマルチポストする無礼なひと。
>>1595 じゅじゅ
>> 今課題で、UNIXにApacheを入れ、フリーの掲示板を
>> ダウンロードしてとりつける課題をしています。
>最近どうして こんな変なのばっかりわいてくるんだろう。
>マルチポストする人はさようなら。

本当に困っているから複数のサイトで質問しているだけで何が無礼なのか分かりませんが。
全てのレスに対してお礼を書けば問題ないと思いますが?
何に対してむかつかれているのか全然分かりません。
嫌なら掲示板のどこかに書いておけばいいと思いますが使い方の方にすら書かれてもいないようですし。
あなたの方がよほど無礼だと思いますが。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1602 # gixs 2001/01/18 (木) 21:56:09
>>1586 YAGI氏

最近、AIXもNISもごぶさたしていますが。
AIXのコツは、「なんでもsmit」、なので、

> 私的にはNISの解除の方法がおかしいのかなと思っています。
> (1./etc/passwdを戻す、2.smitでNISを解除する)

は、O.K.だと思います。
ただ、「/etc/passwdを戻す」はちょっと意味が取れません。
この「NISの解除」と言っているのは、「NISサーバをアップデートする前に、NISサーバを停止すること」の意味ですよね?
だとしたら、その間、/etc/passwdをいじる必要はありません。

NISサーバ側の作業は、
1. smitでNISサーバを停止
2. smitでNISサーバのアップデート
3. smitでNISサーバの起動

NISは(確か)statelessなので、クライアント側は何もせずにサーバに繋げると思います(ぼくなら、ypcat passwdで確認します)。
しかし、まあ、AIXは色々あるので、ダメならクライアント側(ypbind)もsmitで再起動するしかないでしょう。

# 余談ながら、通(つう)はsmitではなく、tty版のsmittyを使います。
# 走る男が見たいから、という理由でsmit(X版)を使い続ける人もいますが。
# 分からない人向けへの補足。
# smitは、AIXのGUI設定ツールなのですが、Windowsで砂時計がでるような状況で、
# 走る男のアニメーションがあります。
# しかも、設定が失敗すると、男がこけます。
# AIXがSolarisより優れているのは、これだけ。

No. 1603 # 68user 2001/01/18 (木) 22:15:59
>>1600 じゅじゅ
>>1601 rererenore
あなたがたに欠けているのは情報を共有しようという精神です。

あなたがたは自分一人情報を得て満足かもしれませんが、
少なくとも僕は、あなたがたを助けるため *だけ* に わざわざ
時間を割いて、検索したりソース見たりして回答しているわけでは
ありません。みんなで知恵を出しあって情報を共有するのが
掲示板を開設している第一の目的です。

たとえば僕は
>>1595 じゅじゅ
を読んで「それは ftp で ascii モードで転送してないからでしょう」と
(実際はもっと長文) 投稿しようとしましたが、その前に
    http://www.parkcity.ne.jp/~chaichan/qanda/qa539.htm?01-01-17-09-06
を見たところ、同じ質問が書いてあり、
    じゅじゅ [WriteDate : Thu Jan 18 16:56:31 2001]
まで書きこんでありました。

すでに解決していたことを、僕はいちいち細かく解説しようとして
いたわけで、全くの無駄な行為です。あなたがたは、他の掲示板の
全ての閲覧者に対して、よーいドンで競わせて、だれが早く回答
するか待っているようなものです。無礼な行為だとは思いませんか?

他の掲示板に書き込んで既に情報を得ているのに、親切な誰かが
>>1577 rererenore
を見て、いちから説明しようとするかもしれない。おかしいとは
おもいませんか?

本当に緊急のトラブルで困っているなら、「申し訳ありませんが、
緊急の事態なので、こことこことここに書き込みました」と
一言添えて、最後には全ての掲示板で得られた情報をまとめて、
こういう結果になりました、とサマリを書き込むべきでしょう。

> 全てのレスに対してお礼を書けば問題ないと思いますが?
ダメです。情報の共有化がされていない。情報が集まるのは
あなたのところだけ。

> 嫌なら掲示板のどこかに書いておけばいいと思いますが「使い方」の
> 方にすら書かれてもいないようですし。
こんなことは、ちょっと答える側の立場に立ってみればわかると
思いますが、いちいち書かないと理解できませんか。それとも
僕の主張自体が理解できませんか。

http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56
http://script.lovely.to/bbs/infolng.cgi?print+200101/01010026.txt
http://script.lovely.to/bbs/infolng.cgi?print+200101/01010016.txt

No. 1604 # 68user 2001/01/18 (木) 22:17:53
おっとリンクミス。
>>1603 68user
(実際はもっと長文) 投稿しようとしましたが、その前に
        http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56
を見たところ、同じ質問が書いてあり、

でした。

No. 1605 # rererenore 2001/01/18 (木) 22:33:47
>No. 1603 68user 2001/01/18 (木) 22:15:59
おっしゃる事は理解できますし、言われてみればもっともな考えだとは思います。
しかし、それはあなたがたのこういった世界に付いて詳しい方々の考え方であってわれわれの様な素人や、始めたばかりの人には情報の共有と言った概念は言われなければ無いと思います。
一言書かれていればこういう事態も避けられると思います。
今後は私も気を付けます。

No. 1606 # 68user 2001/01/18 (木) 22:37:01
>>1605 rererenore
そうですか。では、使い方のところに その旨書いて
おくことにします。

No. 1607 # H.Motoki [E-mail] 2001/01/18 (木) 23:42:51
はじめて発言します。
実はUNIXはまだ初心者ですが・・
下記のようなツール(C言語用ライブラリでも可)を探しています。
        ・コマンド型ツールでメール層送受信が可能なもの
            かつ、添付ファイルが遅れるもの
            かつ、Solarisで動作するもの
・・って、ありますか?

どなたか知っている方いましたら教えてください!
(できれば、メールアドレスに送付してくれれば、なお可)

No. 1608 # H.Motoki [E-mail] 2001/01/19 (金) 00:03:34
先ほどの発言にて誤字・脱字が多いので再送します。
下記のようなツール(C言語用ライブラリでも可)を探しています。
        ・コマンド型ツールでメール送受信が可能なもの
            かつ、添付ファイルが送れるもの
            かつ、Solarisで動作するもの
・・って、ありますか?

どなたか知っている方いましたら教えてください!
(できれば、メールアドレスに送付してくれれば、なお可)

No. 1609 # じゅじゅ 2001/01/19 (金) 00:46:42
この掲示板を利用しているみなさん、ほんとうに私事で
ご迷惑をおかけしました。実際私が投稿したことは
自分本位であり、みなさんの迷惑にしかならず
間違っていたことと理解しています。
しかし課題の締め切りが迫ってしまい、日々の勉強している
ことの範囲外の課題であったために、調べる時間も少なく
このような事態を引き起こしてしまいました。
本当にご迷惑をおかけしました。
しかし、管理者さんのこの掲示板の意図を知ることが
できたので自分ではとても勉強になりました。
知識不足、常識不足ですいませんでした。

結局掲示板の設置の方は、その改行コードの変更の仕方が
よくわからなかったので、あらかじめ改行コードが
UNIXで設定されているものをダウンロードし、
confファイルを手直しして、設置することができました。
ありがとうございました。

No. 1610 # rosegarden 2001/01/19 (金) 13:54:58
あえて、クロスポストに答える形で書き込みます。
ちょっと面白いこと(だから内容はマニア向け)があり、
それを書いてみたいので...。
>>1609 じゅじゅ
> 結局掲示板の設置の方は、その改行コードの変更の仕方が
> よくわからなかったので、
ftp での転送が悪かったからだろうという回答は出ているので、
直接改行コードの変更の話にしましょう。
改行コードを変えるのには、例えば、perl などで
% perl -pni.bak -e 's/^M$//' hoge.cgi
等とすれば良いのです。上で、^M は表現上 2 文字になっていますが、
この部分はコントロールキーを押しながら M を入力します。
ところが、困ったことにもろに打ち込むとリターンを打ったのと同じで、
これを打ち込めません。これは初心者の FAQ で、通常コントロール V
を打ってからコントロール M を打ちます。(以下、CTRL-M 等と書きます。)
すると文字通り ^M が打てるんですが、カスタマイズされている場合もあります。
あるいは、カスタマイズしたい場合もあるでしょう。
そう言った場合には stty(1) を使うんですが、
% stty -a
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
                eol2 = <undef>; erase = ^H; intr = ^C; kill = ^U; lnext = ^V;
                min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
                stop = ^S; susp = ^Z; time = 0; werase = ^W;
となったときの lnext に「次の一文字を文字通り引用」(literal char???) する
キーが割り当ててあります。上の場合には、だから ^V です。このコマンドは ^H に
「前の文字の削除」を割り当てたい場合にも使います。通常 ~/.login に
stty erase ^H
とか
stty erase ^? (^? は DEL キー)
をいれておけば、それぞれ、CTRL-H や DEL に前の文字の削除を割り当てられます。
これも初心者の FAQ で DEL キーで前の文字を消すにはどうしたら良いのか?
なんて嫌なるくらいに聞かれます。答えは、上のようにすれば良いんですが、
問題はどうやって ^H だとか ^? をいれるかです。この答えも、ここまで
読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。

ちなみに、上の perl のコマンド実行をする場合には tcsh だと ^M が ^J に
変わるので、ash なんかを起動してやった方が良いです。また、^V はコマンドラインや
ed あるいは vi なら有効ですが、emacsen の場合 CTRL-Q が lchar もどきの動作を
します(デフォルトなら)。

ここから本題にはいりますが、上の stty -a の出力は FreeBSD 4-stable のものです。
実は、5-current だと
speed 9600 baud; 25 rows; 80 columns;
(中略)
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
    eol2 = <undef>; erase = ^H; erase2 = ^H; intr = ^C; kill = ^U;
    lnext = ^V; min = 1; quit = ^\; reprint = ^R; start = ^Q;
    status = ^T; stop = ^S; susp = ^Z; time = 0; werase = ^W;
となります。良く見ると、erase2 というのがありますが、これは BS と DEL
両方に前の一文字削除を割り当てられるようにするためです。一般に、
% stty erase ^H ^?
なんてできませんから。こういった需要は多いはずなのに今までサポートされて
なかったんでしょうね。ちなみに、この erase2 については man stty しても
説明がみあたらず、-current の RELNOTES.TXT に書いてあります。
というわけで、FreeBSD には release ごとに結構な相違があります。

# これは昨日見つけて、どこかにこの発見(?)を書きたかった(笑)。

# ところで 3.x-RELEASE にはないが、4.x-RELEASE にはある
# du や df コマンドの -h (human friedly) オプションというのはご存知でしょうか?
# まあ、皆さん知っているでしょうね。この程度なら。

# 長くなりすみません。

No. 1611 # じゅじゅ 2001/01/19 (金) 16:04:30
>>rosegardenさん
教えてくださってありがとうございます。
残念ながら今すぐ自分ではまだ理解はできていませんが
いまから勉強して覚えたいとおもいます。
ありがとうございました。

No. 1612 # YAGI [E-mail] 2001/01/19 (金) 16:07:20
>gixs様
レスありがとうございます。
当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが
区別が分からずsmitでやってました^^;

「NISの解除」はその通りです。
私も、その手順で実際に行なってバージョンアップしたClientをもう一度
NISの再設定を行ってServerのマップをmakeし直すと
接続できなくなってしまうのです。
なお、smitのコマンド類はWinNTのTera Termより発行しています。
(接続できなくなってしまう→Tera TermでClientのサーバに接続できない)

以前にNISの設定を行なった作業がありまして、その時に障害を起こしてしまい(私はその時は作業はしていませんが^^;)、今回はそれをさけたいので色々と方法を模索しているところです。

一度、/etc/netsvc.confを作り
hosts=local,nisを作成してやって見たのですが
今回同様の現象となってしまいました。
また復旧は
stopsrc -s ypbind
startsrc -s ypbind -a "-ypsetme"
ypset (ServerのIP)を打ちました。

もし、これに関しても何か思い当たる点があれば、教えていただけたらうれしいです。
よろしくお願い致します

No. 1613 # ゆっきー [E-mail] 2001/01/19 (金) 16:44:36
こんにちは。
こんなことをお聞きするのは失礼かもしれませんが、
他になかったので失礼します。

よく企業のホームページなどで入力した数字をもとにシミュレーションをし、
計算結果を出力するようなページって多く有りますよね。
私もそのようなページをCGIで作製したいと思いいろいろな参考ページを見ましたが、
思うように解説ページが見つかりませんでした。
もし、入力した数値を計算し、結果を出力するようなサンプルを置いてあるページについて
何か思い当たる点があれば教えていただけないでしょうか。

本当にこんなしょうもない質問ですみません。
よろしくお願いします。

No. 1614 # rosegarden 2001/01/19 (金) 16:52:36
>>1610 rosegarden
まず訂正です。
> となったときの lnext に「次の一文字を文字通り引用」(literal char???) する
うえのは literal next と書こうとしたのでした。
> 読んだ人なら明らかで、lchar キーを使えば言い訳ですね。上の場合すなわち ^V です。
あと上のような、lchar というのはぜんぶ lnext に読み変えてください。

それから、
> ちなみに、この erase2 については man stty しても
> 説明がみあたらず、-current の RELNOTES.TXT に書いてあります。
このくだりを書いた時に見たのは 4-stable box の man stty でした。
5-current box だと説明はないことはないんですが、
> erase VERASE ERASE character
> erase2 VERASE2 ERASE2 character
> werase VWERASE WERASE character
等と言った感じで、表があるだけで、ちょっと不親切ですね。
この部分はあまり変化が無いですね。

http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/bin/stty/cchar.c
ここには説明がありますね。
> 1.10 Tue Nov 28 19:48:06 2000 UTC by jkh
と書いてあるので、つい最近ですね。
http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/release/texts/i386/RELNOTES.TXT?rev=1.190
こちらは RELNOTES.TXT です。

ところで、
http://www.FreeBSD.org/cgi/man.cgi?query=stty&apropos=0&sektion=1&manpath=FreeBSD+5.0-current&format=html
ここで見ることができますね。
http://www.FreeBSD.org/cgi/man.cgi
Plan9 とか Sun OS なんかのマニュアルもここから見ることができるんですね。
今まで、知らなかった。ライセンスはどうやってクリアしたんだろう?
FreeBSD 1.0-RELEASE とか 386BSD とかのマニュアルもありますね。
すごいですね。

No. 1615 # mak(spriggan) [E-mail] 2001/01/19 (金) 19:59:14
>>1591 68user
レスどもです。
ret = select( 64, &work_fdset, NULL, NULL, &time_out );
と指定していたので、ファイルディスクリプタ
0〜64までをチェックしかselectはチェックしていなかったので
selectはタイムアウトを返し、実際取得したファイルディスクリプタは
64を超えた数になっていたのでFD_ISSETは反応を返した。
というふうになっていた模様です。

ちなみに、ファイルディスクリプタの番号を
ここからここまでの番号しか取得しない。とか制限かける方法とか
ないのでしょうか?

No. 1616 # みかん(perlでソケットの質問してた方) 2001/01/19 (金) 22:41:30
レス遅くなってごめんなさい。
>>1525 68user
>2. 相手側がコネクションを切断したときも select は 1 を返します。
> その際、recv すると1バイトも読めず、0を返しているはずなのに

    コネクションが切断したときのselectの返り値、recvの返り値については
    このレスを見て初めて知りました。ありがとうございます。

>>1526 68user
>ついでに言っておくと、状況にもよりますが、select に
><> や read を使うのは不適切です。select で読み込み

    このサイトで紹介されているECHOサーバのように、「クライアントやサーバーとうま
    く接続できたかどうかを確認する」、というような形が正しいselectの使われ方だと
    考えてもいいですか?

    alarmを使う事でブロッキングを強引に回避するという方法がありますが、他に
    比較的OSに依存しない形でブロックを避ける手段はないでしょうか?

No. 1617 # gixs 2001/01/20 (土) 01:15:01
>>1615 mak(spriggan)氏
> 0〜64までをチェックしかselectはチェックしていなかったので
> selectはタイムアウトを返し、実際取得したファイルディスクリプタは
> 64を超えた数になっていたのでFD_ISSETは反応を返した。
> というふうになっていた模様です。

確かになりますね。
知りませんでした。
しかし、fd_setの戻り値をチェックするのは、select(2)が正数を返した時のみにしておいた方が安全でしょう(select(2)に正しい第1引数を渡したとしても、タイムアウト時にfd_setがゼロクリアされるかは分かりません。規格としてゼロクリアが決まっているならO.K.でしょうが、そこまでしてselect(2)の戻り値のチェックを省く理由も見付かりません)。
# 今回はselect(2)の戻り値チェックを省いたおかげで、第1引数のバグに気づいたわけですが。

> ちなみに、ファイルディスクリプタの番号を
> ここからここまでの番号しか取得しない。とか制限かける方法とか
> ないのでしょうか?

select(2)を呼ぶ時に、チェックすべきファイルディスクリプタの部分だけ、fd_setにマスクをかけますが(第1引数は効率の為)。
それとも、効率を気にしていますか?
確かに、非常に大きな番号のファイルディスクリプタ1つだけをチェックするとなると、無駄がありそうなことは否定しません。
それが気になるなら、poll(2)でしょうか。

No. 1618 # gixs 2001/01/20 (土) 01:33:19
>>1612 YAGI氏
# その場に行けば解決できるかもしれませんが、このやりとりでは、助けられる自信はありません。申し訳ないです。

> 当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが
> 区別が分からずsmitでやってました^^;

X以外でsmitを起動すると、tty版のsmittyと同じ動きなので、

> なお、smitのコマンド類はWinNTのTera Termより発行しています。

smitでもsmittyでも変わりありません。
# という事は、走る男を見ていないんですねえ。
# もしかして一度も見たことが無い、とかだったら不幸です。

> 私も、その手順で実際に行なってバージョンアップしたClientをもう一度
> NISの再設定を行ってServerのマップをmakeし直すと
> 接続できなくなってしまうのです。

うーむ、あまり他人の文章のケチをつけるのもなんですが、何をどういう順序でやったのか、いまいち不明です。
(改行の位置に読点があると考えてよいのでしょうか。
この手の説明は、時系列に並べた箇条書の方が分かりやすいと思います。)

No. 1619 # 68user 2001/01/20 (土) 04:46:57
>>1607 H.Motoki
> コマンド型ツールでメール層送受信が可能なもの
> かつ、添付ファイルが遅れるもの
> かつ、Solarisで動作するもの
僕は知りませんが、
    http://www.freebsd.org/cgi/ports.cgi?query=mime&stype=all&release=4.1-STABLE%2Fi386
の中を見ると、お望みのものっぽいのがありますので、
Solaris でコンパイルしてみてはどうでしょう。


>>1615 mak(spriggan)
> selectはタイムアウトを返し、実際取得したファイルディスクリプタは
> 64を超えた数になっていたのでFD_ISSETは反応を返した。
なるほど納得です。

> ちなみに、ファイルディスクリプタの番号を
> ここからここまでの番号しか取得しない。
ここから、は指定できません。ここまで、ってのは select の
第一引数ですね。多くの UNIX の実装では select が扱えるのは
1024 までのディスクリプタのようですから、この程度なら
僕はあまり気にしません。あと、FreeBSD 4.2-RELEAE の
select(2) には
    For historical reasons, select() will always examine
    the first 256 descriptors.
とありますので、あまり神経質になるほどのことでもないかも
しれません (し、そうでないかもしれません)。

No. 1620 # 68user 2001/01/20 (土) 04:49:52
繁盛しているのはいいけれど、返事が大変だなぁ。

>>1616 みかん(perlでソケットの質問してた方)
>> select に <> や read を使うのは不適切です。
> 「クライアントやサーバーとうまく接続できたかどうかを確認する」、
> というような形が正しいselectの
> 使われ方だと考えてもいいですか?
いいえ。タイムアウトも select の正しい使い方です。

サンプルプログラムを書いてみました。
    http://X68000.startshop.co.jp/~68user/tmp/select-sysread.pl
echo サーバと echo クライアントです。2つスクリプトを書くのが
面倒だったので、fork して 片方が echo サーバになり、もう片方は
echo クライアントとして動作するようにしました。

echo クライアントは echo サーバに接続し、文字列を送り、
それを受け取るだけです。echo サーバは select でソケットを
監視し、マルチスレッドサーバとして動作します。また、
クライアントが接続してから2秒経過したらタイムアウトとして
切断します。

で、これを動かすと、
    親:5000 でクライアント待ち
    子:localhost:5000 に接続します。
    親:127.0.0.1:1291 からの接続を受け付け
    子:送信メッセージ: HELLO (*1)
    親:127.0.0.1:1291 に反応あり
    親:127.0.0.1:1291 からメッセージ受信:HELLO
    親:127.0.0.1:1291 へメッセージ送信:Received HELLO
    子:受信メッセージ: Received HELLO (*2)
    子:5秒眠ります (*3)
    親:タイムアウトにより 127.0.0.1:1291 を切断 (*4)
    子:新しい接続 (*5)
    親:127.0.0.1:1292 からの接続を受け付け
    子:送信メッセージ: HELLO AGAIN (*6)
    親:127.0.0.1:1292 に反応あり
    子:5秒眠ります (*7)
となります。

最初は子が親に HELLO と送り (*1)、Received HELLO を受け
取ります (*2)。次に、子は5秒 sleep するので (*3)、親は
タイムアウトとして切断します (*4)。

次に、子は新しいソケットを生成し再度親に接続します (*5)。
子は親に HELLO AGAIN と送ります (*6)。ただし、今度は
メッセージの最後に改行コードを付けません。そして子は5秒
sleep します (*7)。するとここで親も子も動作が止まり、
永遠にデッドロックします。

なぜなら、親は子からのメッセージを
      $recv_message = <$sock>;
で読んでいるからです。改行コードが送られてこないと、
ここでブロックしてしまいますので、これでは select を
使う意味がありません。

今回は意図的に改行コードを含まない文字列を送りました。
これと同じことが、改行コード以前のデータが到着している
けれど、改行コードはパケットロスにより再送中、という
状況でも起こります。

というわけで、こういうときは
      sysread($sock, $recv_message, 100);
などとします。これなら、既に到着しているデータのみを
読みます。100バイト分のデータを読もうとしますが、もし
そのとき10バイト分のデータしか届いていなかったら、
そこで sysread から処理が戻り、select まで処理が
進み、正常にタイムアウト処理が行えます。

No. 1621 # 68user 2001/01/20 (土) 05:01:36
>>1613 ゆっきー
> もし、入力した数値を計算し、結果を出力するような
> サンプルを置いてあるページについて何か思い当たる
> 点があれば教えていただけないでしょうか。
たとえばどのような計算をしたいのですか?

テキストボックス1とテキストボックス2に数字を入力させ、
ボタンを押すと、2値の和を表示する CGI プログラムは
書けますか?

>>1599 キチキチ
そんな腐れサーバとは早く縁を切りましょう :-)

> TELNETが禁止のサーバで、CRONTABみたいに定期的に
> パールスクリプト実行できるテクニックってありますか?
crontab 自体の使用が禁止されておらず、なおかつサーバ管理者を
敵にまわしてよいなら、CGI プログラムから crontab を設定する
とか、~/.forward に crontab を設定するように仕込んでおいて
メールを投げるなどの方法はあります。でも、お薦めしません。

あと、外部から定期的に指定の URL にアクセスしてくれる
サービスがありますので、それを使って CGI プログラムを
一定時間ごとにアクセスさせるってのもあります。
確か webtimer って言ったかな。検索して探してみてください。

No. 1622 # 68user 2001/01/20 (土) 05:30:50
>>1610 rosegarden
補足などしてみたり。間違ってたらご指摘お願いします。

    % cat
と実行して、C-p,C-m,C-v,C-m とタイプしてみて下さい。C-p は ^P と
出力されるでしょう。rosegarden さんが書かれた通り、C-m は改行に
なります。C-v C-m は ^M と表示されます。

この表示は、キー入力を受け取った端末ドライバが行っています。その
端末ドライバのキー割り当てを変えるのが stty コマンドなわけです。
改行 (この場合 C-m と等価) を打たない限りは、cat に文字列は
渡りません。1行のデータが確定して初めて、端末ドライバが cat に
データを送ります。

次に tcsh か bash を起動して、そこで C-p,C-m,C-v,C-m をタイプして
下さい。C-m や C-v C-m はさきほどと同じですが (tcsh ^M でなくて
^J となりますが、両方改行コードなのでこれは置いといて) 、C-p の
挙動が違いますね。1つヒストリをさかのぼります。つまり、1行を
入力していなくても、1文字打った瞬間に tcsh や bash にデータが
渡っていることになります。

これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
取得しているからです。これを canonical モードといいます。端末の中で
動く mule や emacs や vi もcanonical モードになっているわけです。
これらは端末ドライバを経由していないので、stty の設定とは無関係です。
例えば tcsh のコマンドラインで C-v C-m で ^M となるのは、
    % stty erase ^H
しているからでなく、デフォルトで
    % bindkey ^V quoted-insert
という設定になっているからです (bindkey は tcsh の内部コマンド)。

一方、伝統的な sh は canonical モードでは動きません。(Linux だと
sh=bash だから例外)。つまり端末ドライバ経由でキー入力を拾う
わけで、この場合は stty を使って設定します。

> du や df コマンドの -h (human friedly) オプション
> というのはご存知でしょうか?
関係ないですが、FreeBSD 2.2.6-RELEASE では du -s が使えず
くやしい思いをしました。

使いこなせると幸せだと思うオプション。
    ls -lt、uniq -c、tail -f、du -s
# du -s は Solaris にはないかな。

No. 1623 # rosegarden 2001/01/20 (土) 07:09:17
>>1622 68user
> これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
> 取得しているからです。これを canonical モードといいます。端末の中で
> 動く mule や emacs や vi もcanonical モードになっているわけです。
> これらは端末ドライバを経由していないので、stty の設定とは無関係です。
あ、そうですね。前の
>>1610 rosegarden
を見ると、emacs の設定も stty でするように読めますね。そう思って読むと、
stty 経由で設定するものとソフトウェア自体が設定するものとがごっちゃに
なっていますね。「コマンドライン」というのは、最近の私の環境だと
tcsh での話になるから、stty うんぬんは、まちがいだなあ。

とにかく、補足というかご指摘ありがとうございました。

> ls -lt、uniq -c、tail -f、du -s

このなかでは、uniq -c は知らなかった。これ便利ですね。

No. 1624 # 403 2001/01/20 (土) 08:56:46
>>1622 68user
> これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を
> 取得しているからです。これを canonical モードといいます。端末の中で
> 動く mule や emacs や vi もcanonical モードになっているわけです。
> これらは端末ドライバを経由していないので、stty の設定とは無関係です。
ttyドライバは経由してるけど、canonicalはほぼ素通しなモードなので、直接取ってるように見えてる。
コントロールコードは、sttyでの設定と同一のものを使用するプログラムが多い。
が正確でしょう。
canonicalモードとrawモードの違いを述べよ。

No. 1625 # Netboy [E-mail] 2001/01/20 (土) 14:41:01
>>1621 68user
>確か webtimer って言ったかな。検索して探してみてください。
それ,私のです(泣).

>>1599 キチキチ
WebTimerは

http://jp.usami.com/~robot01/
  
です.我が家の自宅サーバーからつつきます.
とりあえず'98夏から動いてます.
最近メンテしてませんけど,よかったらどうぞ...

No. 1626 # 68user 2001/01/20 (土) 22:11:49
>>1622 68user
う、canonical と 非 canonical が逆でした。canonical は1行単位、
非 canonical が素通しモードでした。

>>1624 403
> canonicalモードとrawモードの違いを述べよ。
ちと調べてみましたが、canonical, non-canonical と raw, cbreak,
cooked の関係がいまいち…。うーむ。

>>1610 rosegarden
> % stty erase ^H
あと、stty を実行するときには端末が割り当てられている必要が
あるので、~/.cshrc に
    stty erase ^H
と書いていると、rcp などを使ったときに (コピーはできますが)
stty がエラーとなります。なので
    if ( ${?TERM} ) then
        stty erase ^H
    endif
と、環境変数 TERM が設定されている (=端末が割り当てられている)
ときだけ stty が実行されるようにしましょう。telnet や rlogin
でログインしたときは stty が実行され、rcp のときは実行されません。

ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば
こういうことを気にする必要はないのか?

>>1625 Netboy
>> 確か webtimer って言ったかな。検索して探してみてください。
> それ,私のです(泣).
失礼しました (^^; お肉さんのとこで見た記憶はあったのですが。

No. 1627 # rosegarden 2001/01/20 (土) 22:54:24
>>1626 68user
> ここまで書いてふと思ったのですが、stty って ~/.login に書いとけば
> こういうことを気にする必要はないのか?
tcsh のマニュアルには書いてありますね。
> Commands like stty(1) and tset(1), which need be run only
> once per login, usually go in one's ~/.login file.
あと vi ことに nvi からシェルコマンドを実行した時に
.cshrc に stty があるとトラブるそうです。
これは、どこかのメーリングリストで見た記憶があるのですが、
失念しました。

No. 1628 # キチキチ 2001/01/20 (土) 23:03:29
>>1621 68user
ご指導、ありがとーございました☆
> んな腐れサーバとは早く縁を切りましょう :-)
たしかに、おっしゃるとーり...
予告なしに、TELNETもSYSTEMに影響することが全面禁止なんて、洒落にもなってないです(^^;
他のサーバを探してみたら、よさそうなのがいろいろ見つかりました。
頑張っていいサーバを探してみることにしまーす。


>>1625 Netboy
>WebTimer
アドレス感謝です☆
今は必要なくなりそうですけど、
WebTimerにお世話なるときがきたら有難く使わせてください。
そのときはよろしくお願いします。

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1629 # ラルフ 2001/01/21 (日) 05:57:45
はじめまして。どこで聞いたらいいかと探し回った挙句、ここを見つけました。
どうか質問させてください。

私のプロバイダはメールにqmailを使っていて、転送の設定などを行う際に、
.qmail というファイルをホームに置くことになっています。
プロバイダ曰く、「当社はqmailを無加工で設置しています。.qmailの記述内容に関するお問い合わせはご遠慮ください。」
だそうです。

単純な転送の仕方などはわかるのですが、他にどんなことができるのか調べようにも
ネット上に見つかるリソースはqmailの設置や管理の仕方などばかりで、一般ユーザの使い方には
ほとんど触れられていません。
どこかに .qmail というユーザが設置する設定ファイルについて詳しくかかれている
サイト等はないでしょうか?

よろしくお願いいたします。

No. 1630 # 68user 2001/01/21 (日) 06:14:23
>>1629 ラルフ
> どこかに .qmail というユーザが設置する設定ファイルについて
> 詳しくかかれているサイト等はないでしょうか?
http://www.jp.qmail.org/ より、付属文書 -> dot-qmail とたどって、
http://www.jp.qmail.org/q103/jman5/dot-qmail.html ですね。

No. 1631 # 伊部 茂平 [E-mail] 2001/01/21 (日) 07:12:31
Western Digital Caviar33100をインターネットオークションにて購入した者ですが、FDISK.EXEにてフォーマットをするとDOS領域作成に非常に時間がかかります。
故障しているのでしょうか。
故障しているのでなければ、何か良いフォーマット方法を教えてください。
ちなみに自分が使用しているパソコンは、NEC製のPC9821V13です。

No. 1632 # 伊部 茂平 [E-mail] 2001/01/21 (日) 07:38:28
Windows3.1用のグラフィックアクセレータOEM設定ファイル(*.INF)を探しています。提供しているサイト等はないでしょうか?
ちなみに自分が使用してパソコンは、NEC製のPC9821V13で内臓アクセレータGD5430(Cirrus)とハイカラーグラフィックアクセレータPCIボード(NECのPC9821Xaに付属していたもの)です。
MS―Windows3.1のフロッピーディスクにはOEM設定ファイルがありませんでした。
宜しかったら、OEM設定ファイルの提供をお願いします。

No. 1633 # 68user 2001/01/21 (日) 07:52:57
>>1631 伊部 茂平
>>1632 伊部 茂平
Windows について質問するなら、
    http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html
あたりが適当でしょう。

No. 1634 # ゆっきー [E-mail] 2001/01/22 (月) 08:06:25
>>1621 68user
>テキストボックス1とテキストボックス2に数字を入力させ、
>ボタンを押すと、2値の和を表示する CGI プログラムは
>書けますか?

それも書けないちょー初心者です。
こんなものが発言するのって間違いですね。

No. 1635 # O.Z 2001/01/22 (月) 16:43:32
はじめまして
以前pop3,smtpのプロトコルについて調べたときに訪れて以来、
いつも楽しく拝見させてもらっています
好奇心的疑問で、特別切羽詰まってるわけではないのですが、
もしよかったら少しお付き合いのほどを…

現在一般的には、NATを使ってるLAN内の特定の端末に、
外部からアクセスすることは不可能と言われてますよね?
友人に尋ねたら、”RASがあるよ”といわれて調べてみたのですが、
”プロバイダに繋ぐ代わりにRASサーバに繋いで、LANの端末の一部になる”
というのが私のイメージでした。
そこでふと思ったのですが、常時接続している端末がRASを使ったら、
プログラム的にはどうなるんだろう、ということです
物理的に出口は二つあるのですが、
単純にIP解決の順番が複雑になるということなのでしょうか?
一つの端末に二つのIPを振るようなことになる気がしますが、
そもそもこんなこと可能なのでしょうか?
何か情報がありましたら、よろしくおねがいします

No. 1636 # 68user 2001/01/23 (火) 02:47:14
>>1635 O.Z
RAS というものは知りませんが、
> 一つの端末に二つのIPを振るようなことになる気がしますが、
可能です。ネットワークカードが2枚ささっていて、それぞれに
別の IP アドレスが振られているようなものです。

例えば、ルータを買う金がないので PC でゲートウェイマシンを
立てる場合がそれです。ネットワークカードを2枚刺して、1つの
NIC には 10.0.1.1 (ネットワークアドレス 10.0.1/24)、もう
1つの NIC には 10.0.2.1 (ネットワークアドレス 10.0.2/24) を
振ります。

仮に、10.0.1.1 の先にインターネットが繋がっていて、10.0.2.1 の
先には 10.0.2 のネットワークしかないとします。その場合は、
    - 10.0.2 (netmask 255.255.255.0) 宛のパケットは 10.0.2.1 へ。
    - それ以外のパケットは 10.0.1.1 へ (デフォルトゲートウェイ)。
と経路を定めます。

というわけで、このマシン上で HTTP クライアントを動かすと、
経路表に従ってどちらの IP アドレスを始点とするかが決まり、
自然と出ていく NIC も決まるわけです。

ここでは NIC 2枚を例に上げましたが、NIC 1枚と PPP 接続でも
同様です。パケットの出口であるインタフェースが2つあることに
違いはありません。
# IP アドレスというのは、マシンに割り振るものではありません。
# インタフェースにごとに割り振るものです。

ちなみに UNIX では、経路表は netstat -r で、インタフェース
一覧は netstat -i で見られます。

No. 1637 # HANA 2001/01/23 (火) 10:08:07
どこ探せばいいのかも解らず、やっとの思いでここに辿り着きました・・ホッ。
「フォアグランド」「バックグランド」について教えて頂きたく思います。
現在、会社のDB更新(Oracle7)をフォア〜で行っているのですがこれをバック〜に変更すると何かメリットが出るのでしょうか?!
「バック〜に変更しよう」案が出ており、上司から「何か違うの?」と聞かれ、言葉につまっております。助けて下さい。。

No. 1638 # 68user 2001/01/23 (火) 10:30:20
>>1637 HANA
> 現在、会社のDB更新(Oracle7)をフォア〜で行っているの
> ですがこれをバック〜に変更すると
フォアグラウンドで更新というのはどういう意味ですか?
例えば sqlplus をコマンドラインから叩いているという
意味ですか?

No. 1639 # O.Z 2001/01/23 (火) 11:00:23
>>1636 68user
なるほど、経路という概念があったんですね
設定運用等に関してはまるで無知ということが改めてわかりました(笑)
インターフェイスごとにIPを振るというのも、いわれてみれば納得です
本の説明なんかじゃ、端末にIPを振るという感じで説明されてるので、
すっかりそういうものだと思ってました
NICを指定してIPを振ったという事実も忘れて…
思い込みとはかくも恐ろしい(笑)

回答ありがとうございました

No. 1640 # HANA 2001/01/23 (火) 11:01:43
No.1637の付け足しです。
すいません、よく解っていなくて。
Cで書かれているバッチJOBがあり、それが動いているのがフォア〜で見えているという感じです。

No. 1641 # sato 2001/01/23 (火) 11:18:35
linuxのネットワークがどうも調子が悪いようなのです。

ファイルを転送(ネットワークに負荷がかかると)すると途中でネットワークがつながらなくなってしまいます。システムがおちているわけではなく、その後シャットダウン+電源を一度ぬく+linux起動で再びネットワークはつながります。しかし、電源を抜かずに再起動してしまうとネットワークはつながりません。マシンの環境は、WinNT4.0とTurbolinuxがインストールされていてLANにつないでいます。
解決方法を知っている方がいましたら宜しくお願いします。

No. 1642 # rosegarden 2001/01/23 (火) 11:42:14
>>1635 O.Z
> 現在一般的には、NATを使ってるLAN内の特定の端末に、
> 外部からアクセスすることは不可能と言われてますよね?
そうなのでしょうか? port forwarding あるいは port redirection
を併用したら、可能なような気がしていますが。私は FreeBSD 使っていて、
ISP の接続の際に FreeBSD の ppp コマンドを使っています。そのコマンドに
はしっかり、外から来たパケットを特定のホストの特定のポートに取り次ぐ
機能がついています。当然、natd(8) にもその機能はついています。

もちろん、NAT の純粋な規格上の話であるかどうかは別です。規格は知らない
のですが、私がいいたいことは、NAT 自体が LAN 内の特定のマシンに外部か
らのアクセスさせることが無理であるにしても、(おそらく大抵のNATを実装し
たソフトには)実用上それを可能にする仕組みがあるんじゃないかということ
なんですが。

あと、
> 一つの端末に二つのIPを振るようなことになる気がしますが、
> そもそもこんなこと可能なのでしょうか?
これは alias 使って、一つのインタフェースに
# ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255
などとするのではだめなんでしょうか? (上のコマンドライン例は適当です)。

# 最近、ポカが多いから、自信ないですけど :-{

No. 1643 # 68user 2001/01/23 (火) 11:50:56
>>1641 sato
そもそも NIC の型番を書かないと、根本解決には至らない
でしょう (書いてもらっても僕はわかりませんが)。

繋がらなくなったら一度 ifconfig [interface] down して、
ifconfig [interface] up すれば直るのかもしれませんが、
しょせん対処療法ですね。

>>1640 HANA
> Cで書かれているバッチJOBがあり、それが動いているのが
> フォア〜で見えているという感じです。
C で書かれている DB 更新用コマンドがあるのですね?
それをコマンドラインからタイプしている、ということを
指してフォアグラウンドで動かしている、と表現している
のですね?

UNIX 的な意味で「バックグラウンド」と言うと、
    % foo &
と & を付けてコマンドを実行することですが、これを
行いたいのですか? もしそうだとしたら、なぜですか?

No. 1644 # rosegarden 2001/01/23 (火) 12:20:56
>>1642 rosegarden
> そうなのでしょうか? port forwarding あるいは port redirection
> を併用したら、可能なような気がしていますが
ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。
ifconfig alias 使った時には、うまく jail へ port forwarding
できたのに。やはり物理的に別マシンだとむりなんでしょうか?

No. 1645 # 68user 2001/01/23 (火) 12:39:51
>>1642 rosegarden
>> 現在一般的には、NATを使ってるLAN内の特定の端末に、
>> 外部からアクセスすることは不可能と言われてますよね?
> そうなのでしょうか? port forwarding あるいは port redirection
> を併用したら、可能なような気がしていますが。
「一般的には」という意味にもよるとは思いますが、可能ですね。
FreeBSD の natd なら、redirect_addr/redirect_port あたりで
設定した記憶があります。別マシンでも問題ないです。

> 一つのインタフェースに
> # ifconfig fpx0 inet alias 192.168.1.1 netmask 255.255.255.255
> などとするのではだめなんでしょうか?
あえて書きませんでしたが、一つのインタフェースに複数の
IP アドレスを振ることもできます。
    ex0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
            inet 10.0.1.103 netmask 0xffffff00 broadcast 10.0.1.255
            inet 10.0.1.116 netmask 0xffffff00 broadcast 10.0.1.255
            ether 00:aa:00:b9:ab:8e
こんな感じ。

IPv4 だと上にある方が primary って決まってるんだっけな。
IPv6 はどっちが主か副かは区別がなかったかもしれない。

用途としては、同じ NIC に IP アドレスを2つ振って、ftp
サーバを1つだけ起動しておき、どっちの IP アドレス宛に
接続してきたかで、表示する内容を変えるという、バーチャル
ホストのようなことができます (というか、それしか知らない)。

HTTP だと Host ヘッダがあるので、1つの IP アドレスで
バーチャルホストができるんですけどね。

No. 1646 # HANA 2001/01/23 (火) 12:50:29
何度もすいません。バックグラウンドで動かした方が、フォアグラウンドで
動かすよりメリットがあると言われました。早い,コンソールがフリーズ
しても問題なくバッチが終了する。。。事実でしょうか?
他にも”DB更新バッチ”を動かすのに何か違いがでるのでしょうか?

No. 1647 # 68user 2001/01/23 (火) 13:03:46
>>1646 HANA
はぁ、こっちの出した問いには答えず、質問するのみで
疑問を解決しようとは、こりゃまた人をなめた話ですね。

以下、詳しく説明する気はなくなったので独り言。
興味のある人は突っ込んで下さい。

> 早い
速さは変わりません。

> コンソールがフリーズしても問題なくバッチが終了する
端末からログインして実行すると、接続が切れたとき
HUP シグナルが飛んできてプロセスは終了します。では
バックグラウンドなら OK かというと、たしかシェルに
よるんだったかな。bash なら & を付ければ nohup 相当
のことをしてくれたかもしれない。tcsh なら & を付けても、
接続が切れれば SIGHUP が飛びます。

No. 1648 # HANA 2001/01/23 (火) 15:31:30
そういうつもりは全くなかったのですが、結果的に問いに答えず質問だけ
してしまった様です。すいませんでした。
バックで動く様、自分たちで変更するのではなく、”依頼”する為、それが
「&」をつける事なのか解っていないのが事実です。”その方が良い
らしい”と、根拠のないまま話が進んでいる状態の為何が違うのかと思い
すがる様にメールしてしまいました。本当に申し訳ございませんでした。

No. 1649 # perrolin 2001/01/23 (火) 19:48:31
皆様はじめまして
私は現在 perl で SOCKS クライアントを作成しようとしているものですが、なかなか資料も少なく煮詰まっております(c はまったく分かりません)
RFC や NEC を読んでもうまく SOCKS サーバーに送信できないのです
どなたか SOCKS に詳しい方、ご教授いただけないでしょうか?

赤色の文字は 「Windows 機種依存文字」か、いわゆる「半角カナ」です。 この掲示板では自動変換されますが、今後は使用しないで下さい

No. 1650 # has 2001/01/23 (火) 23:10:51
>>1648 HANA
あなたが困っているらしいことは、とてもよくわかるのですが、
ここで書き込みを見ている人にとって、お困りの問題を把握するための
情報源はあなたの発言だけであることを御理解下さい。
問題を解決するためには、目標が何であるのか、現状がどうなっているのか、
ということが把握できなければならないのはどんな世界でも共通ですし、
おわかり頂けることと思いますが、
今の状態では現状把握のための情報が圧倒的に不足していますので、
おそらくほとんどの人は、あなたの質問に答えることができません。

もしまたこの掲示板にしろ別の場所にしろ質問なさるようでしたら、
その辺りに十分気を使うべきであるということを誤認識下さい。

# 余計な発言でしたらごめんなさい

No. 1651 # rosegarden 2001/01/24 (水) 01:31:37
>>1644 rosegarden
> ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。
> ifconfig alias 使った時には、うまく jail へ port forwarding
> できたのに。やはり物理的に別マシンだとむりなんでしょうか?
>>1645 68user
> FreeBSD の natd なら、redirect_addr/redirect_port あたりで
> 設定した記憶があります。別マシンでも問題ないです。
原因が分かりました。今日一日、これにはまった :-<
ipfw の設定変えたり、果ては tcpdump でパケットモニタして、
調べたり散々色々なことをしたけど、全部無駄でした。
NAT の設定ページ見たら一発で解決しました。

原因は、NAT 動かしているマシンで、/etc/rc.conf に
gateway_enable="YES"
が入っていなかっただけです。
# ああ、自己嫌悪

これだけでは、お騒がせしただけなので、ちょっと設定書いておきます。
私の場合 FreeBSD の /usr/sbin/ppp の NAT を使っています。ダイヤルアップです。
(1) gateway_enable="YES" を /etc/rc.conf にいれる。
(2) ファイウォール等の設定を見直す。
(3) /etc/ppp/ppp.conf は以下の通り。
default:
                set device /dev/cuaa0
                set speed 115200
                set timeout 300
                set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 15 \"\" ATE1Q0 OK-AT-O \\dATDP\\T TIMEOUT 40 CONNECT"
                disable lqr
                deny lqr
ISP:
                accept chap
                disable pap
                disable mppe
                nat enable yes
                nat log yes
                set openmode active
                set phone "xxx-yyyy" # ISP の AP の電話番号
                set authname username # アカウント
                set authkey password # パスワード
                set timeout 300
                set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
                add default HISADDR
                enable dns
                nat port tcp 192.168.1.2:80 80

最後の nat port tcp 192.168.1.2:80 80 というのが port forwarding
の設定で、ダイヤルアップをしているマシンの 80 番ポートに到着した
パケットは全部 LAN 内部の 192.168.1.2 というマシンの 80 番ポートに
取り次げます。ですから、LAN 内部に外部公開用のサーバをおくことが出来ます。

# 上の ppp.conf はあまり考えて書いていないので、
# 多分突っ込む余地は沢山あるかと思います。

No. 1652 # rosegarden 2001/01/24 (水) 02:02:37
>>1651 rosegarden
ちょっと補足です。
FreeBSD の古いインストール解説書などを見ると、ppp で NAT
使う際には ports/packages の NAT つき ppp をインストールするように
などと書いている場合があるのですが、最近の 4.0-RELEASE 以降の
/usr/sbin/ppp ならデフォルトで NAT をサポートしていると思います。
私が確認したのは 4.1.1-RELEASE 以降なので、4.0-RELEASE と
3-stable でどうなっているのかは、断定は出来ないのですが、
port の NAT ppp が必要なのは以前のリリースだったと記憶しています。
4.2-RELEASE などをインストールしている人は下の方法で NAT life が満喫できます。

あと kernel OPTION の設定云々と書いてある本もありますが、
4.2-RELEASE 以降なら、カーネルの再構築はほとんど不要だと思います。
とりあえず試すだけなら、GENERIC カーネルでも十分だと思います。
現在は KLD が Solaris 並にうまく動作するようになっているので、
メモリをケチる必要がなければ、自動的に必要なモジュールをロードします。
もちろん、再構築した方がカーネルが小さくなるのでそれはそれで
メリットありますけど。

# とはいっても、パソコンもう一台動かすための電気代がもったいないので、
# 私個人としては、まず、自分の家では NAT なんか使いませんが。

No. 1653 # 68user 2001/01/24 (水) 02:31:04
>>1649 perrolin
> どなたか SOCKS に詳しい方、ご教授いただけないでしょうか?
僕は全くわかりませんし、詳しいページも知りませんが、
Net::SOCKS モジュールが参考になるかもしれません。

>>1652 rosegarden
ppp に NAT 機能が付いたのは FreeBSD 3.3-RELEASE からです。
佐藤淳一さんの nat-patch は archie、rlogin、RealAudio、
X プロトコル などの各種プロトコルにも対応していましたが、
現在は開発が終了し、本家の libalias へのマージ段階と
見てよいと思います。
    http://configure.sh/FreeBSD/extend-libalias-j.html
    http://www.jp.FreeBSD.ORG/QandA/HTML/211.html
    http://configure.sh/FreeBSD/NAT/nat.html
    http://configure.sh/FreeBSD/NAT/nat2.html (このページおもしろい)

No. 1654 # O.Z 2001/01/24 (水) 11:29:05
むむ、どうやら私の書き方は、かなり不適切だったようです
”特定”ではなく、”任意”という言葉を使うべきでした

内から外はNATが使えるけど、外から内は何を使うのか
というのがそもそもの疑問だったのです
結局RASも内の一部になるという技術のようですし、
IPv4のうちは、外から内は実質不可能なのかな、というのが感想です

お二人のNATの説明はとても参考になりました
まだしばらくはNATのお世話になりそうですしね

No. 1655 # YAGI [E-mail] 2001/01/24 (水) 17:25:54
>1618 gixs様
レスが遅くなってしまい、すいません。
文章の書き方はすみませんでした。
他の人にも、時系列で書いた方が分かりやすいと指摘を受けました。

一度、リブートをしまして1からはじめてみましたので
手順を書いてみます。
1.NISサーバの設定
    NIS管理しようとしているユーザの作成/etc/passwd
    smitty chypdom
    smitty mkmaster
    コマンドを発行し正常終了しました。
2.NISクライアントの設定
    smitty chypdomでNISサーバと同じドメインを入力しました
    smitty mkclientで開始時期を決め実行しました。
    /etc/passwdをNIS管理用に編集しました

passwdを保存すると、クライアントのログインが不可となってしまうのです。
ypcat passwdも応答がない状態になってしまいます。

私のほうでも、色々と思い当たる物は考えてみたのですが、
NIS以前に
1.会社の引越しがあってIPが変わった
ということもあったのです。

ただ、私のほうで何をどう見てよいかわからないレベルなもので
他の人にも聞いたりしているのですが、特に問題ないのではという回答なのです。

もし、思い当たる点があれば教えていただきたく思います。
IPが変わる際に設定しなければ行けないファイルhostsファイルなど
があれば、教えていただけると、非常にうれしいです。

毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します

No. 1656 # gixs 2001/01/24 (水) 21:59:48
> 文章の書き方はすみませんでした。

いえいえ、人のことを言えるほどでもありませんので。

NISクライアント側には、
1. そもそもNISの/etc/passwdが見えているか
2. 見えていたら、それをログイン時に参照できているか
の2段階のチェックポイントがあります。

> passwdを保存すると、クライアントのログインが不可となってしまうのです。
> ypcat passwdも応答がない状態になってしまいます。

ypcat passwdの応答が無いということは、まだ第1段階の問題のようです。

> 2.NISクライアントの設定
> smitty chypdomでNISサーバと同じドメインを入力しました
> smitty mkclientで開始時期を決め実行しました。
> /etc/passwdをNIS管理用に編集しました

smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、
それともIPアドレスですか?
ホスト名で入力するなら、ローカルの/etc/hostsにNISサーバのエントリが必要です。

IPアドレスで入力するなら、結局、

> マップの更新後に、stopsrc -s ypbind
> startsrc -s ypbind -a "ypsetme"
> ypset (ServerのIPアドレス)
> を行なったところ、無事に設定する事が出来ました。

これを、smittyが内部的に実行するだけだと思いますが。
(明示的にNISサーバを指定しなくても、ブロードキャストで見つけられる・・・はず、
ですが、何とも言えません)


ローカルの/etc/hostsにNISサーバのエントリがあるのに、
ホスト名での指定がうまく行かない場合、ホスト名の名前解決がうまくないのでしょう。

> 一度、/etc/netsvc.confを作り
> hosts=local,nisを作成してやって見たのですが

こう言っているので、問題無いとは思いますが。
ただ、古いAIXでは、このファイルは無かったはずです。

ypcat passwdが応答の無い時、
ping [NISサーバのホスト名]
の応答はあるのでしょうか?
無いなら、ローカルの/etc/hostsを先に見ていないと判断できます。

> 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します

# どうでもいい突っ込み。
# 「わかりづらい」なら、この誤変換は出ないと思います。

No. 1657 # perrolin 2001/01/25 (木) 01:38:58
>>1653 68user 様
>Net::SOCKS モジュールが参考になるかもしれません。

レスありがとうございます。
Net::SOCKS を使ったソースを参考にがんばってみたいと思います。

No. 1658 # YAGI [E-mail] 2001/01/25 (木) 11:05:46
>gixs様

>smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、
>それともIPアドレスですか?
この画面なのですが、AIXのバージョンが4.2.1の為に
smitty mkclientで表示される画面が、
「* NIS クライアントを開始する時期 両方」
しか、表示されないのです

>ypcat passwdが応答の無い時、
>ping [NISサーバのホスト名]
>の応答はあるのでしょうか?
試して見たのですが、応答ありませんでした。

># 「わかりづらい」なら、この誤変換は出ないと思います
タイプミスで「わかりずらい」と打っていました。^^;

No. 1659 # kaori [E-mail] 2001/01/25 (木) 16:12:33
  はじめまして。 kaoriと申します。

  Perl言語を勉強中です。 非常に参考になる情報をありがとうございます。
いつも感心しながら参考に勉強させてもらっています。

  どうしてもわからないので教えてください。
Socketの使い方はなんとなく判ったのですが、IPv6のSocketはどういうふうに
すればよいのでしょうか?
Socket6っていうのをインストールしてみましたが、よくわかりません。。

  私の環境は、FreeBSD-RELEASE4.1に、Perl5です。

  こんな感じで作っていて、IPv4ではちゃんと動作しています。

                $port = getservbyname($port_no,'tcp') || $port_no;
                $socket = IO::Socket::INET->new(PeerAddr => 127.0.0.1,
                                                                PeerPort => 80,
                                                                Proto => 'tcp',
                                                                );

  ご助言、よろしくお願いいたします。

No. 1660 # 68user 2001/01/25 (木) 18:52:18
>>1659 kaori
  - IPv6 環境が構築してあるか。ping6 コマンドを使って
      IPv6 で反応が返ってくるか (localhost 宛でもよい)。
  - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分
      無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを
      使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが
      ありません。

それをクリアすれば、少しの例外を除いて基本的には書き方は同じです
(そうしないとソースレベルでの互換性が全くなくなるので)。例外と
いうのは gethostbyname の代わりに getaddrinfo を使うとか。

とりあえず perldoc Socket6 してみてください。サンプルの
ひとつでも載っているのではないでしょうか。

No. 1661 # 68user 2001/01/25 (木) 21:22:48
>>1660 68user
> 少しの例外を除いて基本的には書き方は同じです (そうしないと
> ソースレベルでの互換性が全くなくなるので)。例外というのは
> gethostbyname の代わりに getaddrinfo を使うとか。
あー激しく不正確だなぁ。gethostbyaddr で IPv6 なプログラムは
書けます。でも、AF_INET を AF_INET6 にしないといけないとか、
struct sockaddr_in を struct sockaddr_in6 にするだとか、
ソースレベルでの書き換えが必要になります。しかもそのように
書き換えると IPv4 では動きません。

そりゃまずいというわけで、IPv4 でも IPv6 でも同じ書き方が
できるような新しいライブラリが追加されました。getaddrinfo
という関数や AF_UNSPEC というアドレスファミリ (AF_INET とか
AF_INET6 とかを指定する必要がない) などなど。

というわけで、IPv6 only のプログラムは簡単に書けますが、
書いちゃいけません。IPv4/v6 両方で動くようなプログラムを
作るべきです。

あと、FreeBSD 4.1-RELEASE のデフォルト状態なら IPv6 対応の
はずですね。/etc/inetd.conf の
    #echo stream tcp6 nowait root internal
あたりを有効にして inetd を再起動して、それとお話しする
クライアントを書いてみるといいでしょう。

以上、IPv6 アプリを書いたことのない者 (IPv6 を使ったことさえ
ない) のたわごとでした。

No. 1662 # 68user 2001/01/25 (木) 21:47:20
しつこくて失礼。perl5.005_03 に Socket6 モジュールを入れてみました。

>>1660 68user
> とりあえず perldoc Socket6 してみてください。サンプルの
> ひとつでも載っているのではないでしょうか。
ばっちり載ってますね。これをちょいといじって
    % netstat -a | grep tcp6 | grep echo
    tcp6 0 0 *.echo *.* LISTEN
なサーバにつなげようとしたら、
    Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
    for module Socket6: /home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so:
    Undefined symbol "in6addr_any" at /usr/local/lib/perl5/5.00503/i386-freebsd/DynaLoader.pm
    line 169.
だそうで。原因究明はまた後日…と言いたいところだけれど、
こりゃ僕のレベルではいかんともしがたいですな。

No. 1663 # 68user 2001/01/25 (木) 22:04:27
あーしつこい。でも初 IPv6 体験の記念に (やってることは
しょぼいなぁ)。

4.1-RELEASE あたりなら、telnet も IPv6 ready なので、
    % telnet ::1 echo
で IPv6 で localhost の echo サーバとお話できます。
netstat で tcp6 なコネクションが張られていること、
tcpdump で IPv6 なデータグラムが流れていることを
確認してください。
    % tcpdump -i lo0
    21:56:30.055419 localhost.1206 > localhost.echo: . ack 5 win 57344 (DF) [tos 0x10]
            4510 0028 0eca 4000 4006 2df4 7f00 0001
            ...
    21:54:41.404023 localhost.1204 > localhost.echo: S 705795707:705795707(0) win 16384 <mss 16324>
            6000 0000 0018 0640 0000 0000 0000 0000
            ...
先頭1バイトが4なのが IPv4、6 が IPv6 です。

No. 1664 # gixs 2001/01/25 (木) 22:09:21
> この画面なのですが、AIXのバージョンが4.2.1の為に
> smitty mkclientで表示される画面が、
> 「* NIS クライアントを開始する時期両方」
> しか、表示されないのです

確認しました。
となると、ブロードキャストでNISサーバを見つけるはずですね。

> >ypcat passwdが応答の無い時、
> >ping [NISサーバのホスト名]
> >の応答はあるのでしょうか?
> 試して見たのですが、応答ありませんでした。

ローカルの/etc/hostsにNISサーバのエントリがあっても、応答無しですか?

あまり引き延ばして、却って失望が大きくなってしまうのが辛いので、
状況をまとめます。

/etc/hostsにNISサーバのエントリがあるとして、

1. ping [NISサーバのホスト名]が応答なし
少しだけ脈あり。名前解決の順序がおかしいようです。
FAQの1.800(http://www.landfield.com/faqs/aix-faq/part3/)
にありますが、環境変数NSORDERがあるとか?(可能性は低いですが)

2. ping [NISサーバのホスト名]が応答あり
今さら、この結論も気が引けますが、
ypwhich [NISサーバのIPアドレス]
でうまくいくなら、それで結果オーライにしてしまってよいのではないでしょうか。

No. 1665 # kaori [E-mail] 2001/01/26 (金) 09:28:12
  kaoriです。

  ご丁寧な回答ありがとうございました!
IPv6の環境は整っています(OCNの実験に参加しています)ので、
教えて頂いたのを参考に色々試してみます!

> というわけで、IPv6 only のプログラムは簡単に書けますが、
> 書いちゃいけません。IPv4/v6 両方で動くようなプログラムを
> 作るべきです。

  本当にその通りですね。 アドバイスありがとうございます。

  今後もよろしくお願いします!

No. 1666 # rosegarden 2001/01/26 (金) 16:01:58
ちょっと便乗して試して見たのですが、
>>1660 68user
> - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分
> 無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを
> 使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが
> ありません。
なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。
4-stable も 5-current(こちらは perl 5.6.0)も試しました。
perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、
socket: Protocol not supported
などというエラーを返します。もちろん、inetd.conf 書き換えて、IPv6
の daytime は使えるようにしてあるのですが。一方、添付の C プログラムは
うまくいくので、設定ミスではないと思うのですが。だいたい
telnet ::1 13 もちゃんと反応しますし。

>>1665 kaori
うちでは、localhost しか試せないのですが、kaori さんのところでは
perl でもうまく行っていますか? perl 自体にも IPv6 のパッチあてないと
いけないのでしょうか? とりあえず、Socket6 使って嬉しいのは IPv6/IPv4
両用に書かれたスクリプトでも動作する程度しかありませんね。うちの場合。
KAME パッチをあてて perl を make してみようとも考えましたが、
perl の開発スピードの方が早すぎるようで、パッチが追従しきれてません。

どなたか、うまくいったという方がいらっしゃったら、教えてください。

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

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int
main(int argc, char *argv[])
{
    struct addrinfo hints, *res, *res0;
    int error;
    int s;
    const char *cause = NULL;

    memset(&hints, 0, sizeof(hints));
    hints.ai_family = PF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    error = getaddrinfo("localhost", "daytime", &hints, &res0);
    if (error) {
        err(1, "%s", gai_strerror(error));
    }
    s = -1;
    for (res = res0; res; res = res->ai_next) {
        char hostname[NI_MAXHOST], servname[NI_MAXSERV];

        s = socket(res->ai_family, res->ai_socktype,
            res->ai_protocol);
        if (s < 0) {
            cause = "socket";
            continue;
        }
        if (getnameinfo(res->ai_addr, res->ai_addr->sa_len,
            hostname, NI_MAXHOST, servname, NI_MAXSERV,
            NI_NUMERICHOST | NI_NUMERICSERV) < 0 ) {
            err(1, "getnameinfo");
        } else {
            printf("connecting to %s port %s...\n", hostname, servname);
        }
        if (connect(s, res->ai_addr, res->ai_addrlen) < 0) {
            cause = "connect";
            close(s);
            s = -1;
            continue;
        }

        break;
    }
    if (s < 0) {
        err(1, cause);
    } else {
        char buff[256];
        memset(buff, 0, sizeof(buff));

        if (recv(s, buff, 256, 0) < 0) {
            err(1, "recv");
        }
        printf("%s\n", buff);
    }
    freeaddrinfo(res0);

    return 0;
}

No. 1667 # rosegarden 2001/01/26 (金) 16:38:08
>>1666 rosegarden
> なんか、FreeBSD の /usr/bin/perl は IPv6 に対応してない感じですね。
> 4-stable も 5-current(こちらは perl 5.6.0)も試しました。
> perldoc Socket6 して出て来る IPv6 の daytime のサンプルを試しましたが、
> socket: Protocol not supported
> などというエラーを返します。

原因が分かりました。ああ、余計なポストするんじゃなかったな。
FreeBSD の /usr/bin/perl はちゃんと IPv6 対応していますね。
私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。

ところで、Socket6.pm 持っている人は、サンプルが次のようになっていませんか?

use Socket;
use Socket6;

@res = getaddrinfo('hishost.com', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;
while (scalar(@res) >= 5) {
        ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;

        ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
        print STDERR "Trying to connect to $host port port $port...\n";

        socket(Socket_Handle, $family, $saddr, $proto) || next;
(以下略)

投稿した C プログラム眺めていて気がついたのですが、
        socket(Socket_Handle, $family, $saddr, $proto) || next;
って
        socket(Socket_Handle, $family, $socktype, $proto) || next;
のミスじゃありませんか?

# なんで投稿した直後に気が付くんだろう。
# 私の勘違いかなぁ? 最近ぼけているし...。

ちなみに、私の場合次のようにしたら、スクリプトはうまく動きました。
環境は 4-stable + perl 5.00503 + Socket6 です。

#!/usr/bin/perl
use Socket6;
use Socket;

@res = getaddrinfo('localhost', 'daytime', AF_UNSPEC, SOCK_STREAM);
$family = -1;

while(scalar(@res) >= 5) {
    ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
    ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);

    print STDERR "Trying to connect to $host port port $port $family...\n";

    socket(Sock, $family, $socktype, $proto) || die "socket: $!";
    connect(Sock, $saddr) && last;

    close(Sock);
    $family = -1;
}
if( $family != -1 ){
    print "connected to $host port $port\n";
    while( defined($line = <Sock>) ){
        print "$line\n";
    }
    close(Sock);
}
exit;

# 穴があったら入りたいです。

No. 1668 # rosegarden 2001/01/26 (金) 17:10:37
>>1667 rosegarden
そうだ。補足です。下のスクリプトですが、
> socket(Sock, $family, $socktype, $proto) || die "socket: $!";
この部分の die 云々のところは next にして
> socket(Sock, $family, $socktype, $proto) || next;
とすると IPv6/IPv4 の daytime クライアントになります。私の場合には
最初から、/etc/rc.conf に ipv6_enable="YES" が入っているのと、
デバッグの意味もあって、上の die を入れておいただけです。

socket の三番目の引数は SOCK_STREAM とかそういうのが入ります。
私がはまったのは、サンプルをコピー & ペーストして書き換えたものを
使っていたからです。CPAN にある Socket6 は直っているかも知れません。
(でも、ダウンロードしたのは昨日の夕方ですが。)

# コピー & ペーストなんて、安直なことしたバチがあったんですね。

上のように直して、inetd.conf で IPv4 の方だけ有効にしておくと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
Trying to connect to 127.0.0.1 port port 13...
connected to 127.0.0.1 port 13
Fri Jan 26 16:59:50 2001

という感じで、IPv6 が有効だと
% perl daytime6.pl
Trying to connect to ::1 port port 13...
connected to ::1 port 13
Fri Jan 26 17:01:16 2001

になります。IPv6 見てから、IPv4 見ると言うのは、システムによっては
変わるのでしょうか? とりあえず、うちの場合は telnet も ftp もこの順番です。

# しかし、なぜ投稿してから気がつくんだろう??
# 68user 様ならびに皆様、再三のゴミ書き申し訳ありません。

No. 1669 # 68user 2001/01/26 (金) 17:39:43
>>1667 rosegarden
> 私の場合 ports で Socekt6 インストールしたのですが、ちゃんと動きました。
うちの 4.2-STABLE だと
>>1662 68user
> Can't load '/home/68user/p5-module/i386-freebsd/auto/Socket6/Socket6.so'
でしたが、会社の 4.1-RELEASE だとうまくいきました。うちの環境が
変だったのかもしれません。

>>1667 rosegarden
> socket(Socket_Handle, $family, $saddr, $proto) || next;
> って
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
む、まさにそこではまってました。それを直すと動いたのですが、
この Socket6 って変じゃないでしょうか? 以下の echo クライアントが
デッドロックしてしまうようです。
    
    #!/usr/bin/perl
    use Socket6;
    use Socket;
    
    @res = getaddrinfo('localhost', 'echo', AF_UNSPEC, SOCK_STREAM);
    $family = -1;
    
    while(scalar(@res) >= 5) {
            ($family, $socktype, $proto, $saddr, $canonname, @res) = @res;
            ($host, $port) = getnameinfo($saddr, NI_NUMERICHOST | NI_NUMERICSERV);
            print STDERR "Trying to connect to $host:$port $family...\n";
            socket(Sock, $family, $socktype, $proto) || die "socket: $!";
            connect(Sock, $saddr) && last;
            close(Sock);
            $family = -1;
    }
    if( $family != -1 ){
            select(Sock);
            $|=1;
            select(STDOUT);
            print "connected to $host port $port\n";
            print Sock "test!\n";
            print <Sock>;
            close(Sock);
    }

で、
    print <Sock>
の部分を
    $len = read(Sock,$buf,6);
    print "len=$len\n";
    print "buf=$buf";
とかすれば動きますが、
    $len = read(Sock,$buf,7);
だとダメです。内部でバッファリングしちゃってるのかなぁ?

>>1668 rosegarden
> IPv6 見てから、IPv4 見ると言うのは、システムによっては
> 変わるのでしょうか?
/etc/hosts のエントリ順 (::1 と 127.0.0.1 のどちらが上にあるか) に
よって変わるようです。

No. 1670 # 68user 2001/01/26 (金) 17:53:10
ぐぅ、あほだ。
>>1669 68user
> print <Sock>
そりゃ動かんわな。$buf = <Sock>; print $buf か
print scalar(<Sock>) でした。失礼。

No. 1671 # 68user 2001/01/26 (金) 17:58:46
>>1667 rosegarden
> socket(Socket_Handle, $family, $socktype, $proto) || next;
> のミスじゃありませんか?
で、これどうしましょうかね。
    Hajimu UMEMOTO <ume@FreeBSD.org>
宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても
いいですし、rosegarden さんが既に連絡済みであればそういうことで。

No. 1672 # rosegarden 2001/01/26 (金) 21:18:13
すみません、ちょっと横になっていました。
>>1671 68user
> Hajimu UMEMOTO <ume@FreeBSD.org>
> 宛に投げればよきにはからってくれるでしょうけど、
68user さんお願いできますか? ちょっと今はメール出せません。

それから ::1 と 217.0.0.1 について有難うございました。

No. 1673 # rosegarden 2001/01/26 (金) 22:05:56
>>1671 68user
サンプルのミスといえば、
>>1666 rosegarden
の C プログラムは man 3 getaddrinfo と man 3 getnameinfo
して表示されるサンプルをほとんど借用して書いたのですが、
man 3 getaddrinfo の方のサンプルも些細なところで typo
があります。
                      if (error) {
                                      err1(1, "%s", gai_strerror(error));
                                      /*NOTREACHED*/
                      }
err1 は err の typo ですね。
まぁ、こちらはリンクエラーになるので、はまることは絶対にないかと
思いますが。
# こちらも cvsup したソース見たのですが、直っていないですね。
# cvsup したのは昨日の晩ですが。

No. 1674 # ume [E-mail] 2001/01/26 (金) 22:28:30
I'll fix the typos around samples in getaddrinfo.3 and Socket6.pm.
Thanks!

No. 1675 # itojun 2001/01/27 (土) 00:50:28
be sure to report typos to either *BSD bug database, or KAME bug database.
otherwise they won't get fixed.

No. 1676 # rosegarden 2001/01/27 (土) 01:19:07
>>1674 ume
ume さん。お忙しいのにお手間かけてすみませんでした。
今後、気づいた点があれば、きちんと send-pr しますので、
>>1675 itojun
itojun さん。お忙しいのに、すみません。
これより www.kame.net に行って send-pr しますので、
今晩中にしますので、お時間ください。

それから、なにやら、ぶしつけな書き方で済みませんでした。

No. 1677 # rosegarden 2001/01/27 (土) 01:38:18
>>1675 itojun
>>1676 rosegarden
http://www.kame.net/dev/cvsweb.cgi/kame/kame/kame/libinet6/getaddrinfo.3
ああ、大変申し訳ございません。
以後、確認がとれ次第即時に send-pr 致します。

No. 1678 # 68user 2001/01/27 (土) 03:03:19
>>1672 rosegarden
ume さんにメール出しておきました、と書こうと思ったら
既に解決している…。

せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
勉強が必要ですけれども。
    http://playground.iijlab.net/iij.news/
    http://www.running-dog.net/bsd/40/ipv6.html

No. 1679 # rosegarden 2001/01/27 (土) 18:52:05
>>1678 68user
> せっかくなので IPv6 ネタでも書きますか。その前にだいぶ
> 勉強が必要ですけれども。
是非ともお願いします。これを機会に私も IPv6 について勉強したいと
思っています。

No. 1680 # kikizo 2001/01/28 (日) 11:27:10
はじめまして。知人の会社の話なんですが、自社サーバ(NT)で
HPを公開しています。先日、日本語ドメインを多数取得し、
それらで今公開しているページにアクセスできるようにしたいそうです。
そこで、以下の質問なんですが...

1.複数のドメイン名で同じトップページにアクセスさせたい場合、
ネームサーバ登録時に同じIPを設定することでよいのでしょうか?

2.トップページ以の場合は(例えば、"www.***.com"と
"www.$$$.co.jp/***/***.htm"で同じページにアクセスさせたい場合)
どうすればよいのでしょうか?専門の業者に頼むべきでしょうか?

こちらの掲示板では、場違いな質問ですが、どなたか教えてください。
ここで聞いたほうがいいよ、という情報でもかまいません。
よろしくお願いします。

No. 1681 # 68user 2001/01/28 (日) 17:27:45
>>1680 kikizo
> 1.複数のドメイン名で...同じIPを設定することでよいのでしょうか?
そうです。

> 2.トップページ以の場合は...
バーチャルホストの設定次第でいかようにもできます。どんな
web サーバを使っているかは知りませんが、解説本を数冊買って
熟読すれば可能でしょう。時間と手間を惜しむなら業者に頼む
べきですね。

それはそれとして、一番気になるのは
> 日本語ドメインを多数取得し、それらで今公開しているページに
> アクセスできるようにしたい
これって現状で可能なんですか? 現在日本語ドメインのサービス
を行っている DNS は存在しないと認識しているのですが。
# http://www.onamae.com を見ても何も書いてないし。

あと、jpnic/apnic/internic で使用する文字コードが全然違う
という問題があるそうですが (詳しくは知らない)、ここらへん
どうなっているんでしょうね。

No. 1682 # kikizo 2001/01/29 (月) 12:34:52
>>1681 68user
68userさん、ありがとうございました。
おっしゃるとおり、日本語ドメインは、今は登録だけで使えませんよね。
いつから実際に運用されるのか全く未定だし、最悪何らかのトラブルで
登録したドメインが使えない可能性もあると、某登録代行業者のページに
書いてありました。
そんなわけで、時間はたっぷりありそうなので、ひとつ勉強してみます。

No. 1683 # mimishiro [E-mail] 2001/01/30 (火) 13:45:16
誰か知識のある方、教えてください!
幾つかのサーバーに2つのC言語プログラムを使う権限を与えて
共有ファイルを変更更新させるようなプログラムの例があれば
教えてください。それとそれと、その時サーバーにコンパイラを
持たせなくてもプログラムを動かすことはできるのですか?
何もかもわかりません。先輩方、どうかこんな低レベルな者に
ご指導くださいますよう、よろしくお願い申し上げます。(ミミシロ)

No. 1684 # moe 2001/01/30 (火) 23:55:53
はじめましてメールについてお聞きしたことがあります。
mailxやsendmailで送信したメールでアドレスが存在しなかった場合
そのメール自身はどうなるのでしょうか?
やっぱりサーバーの送信ユーザーに返信されるのでしょうか?
よろしくお願いします。

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