68USERさん、すばらしいサイトを公開なされていて本当に感謝しております。ネットワークプログラミングの基礎知識はWINDOWSのCHMファイルにコンパイルして手元に置いて大変参考にさせていただいております。(LWPメインの「WEBクライアントプログラミング」の百倍くらい助けていただいております。) 本日書き込みさせていただいたのは、質問と言うよりは要望なのですが、PERL5でHTTPクライアントを作る際、SSLで接続する方法を解説頂いたページを掲載して欲しいのです。お忙しいとは思いますがぜひ実現いただけましたら大変助かります。 それではお体にお気をつけて。 今後のご活躍を期待しております。 |
char TempBuf[10+5+5+5+5+1]; /* TempBufを初期化 */ memset(TempBuf, 0x00, sizeof(TempBuf)); /* TempBufに設定 */ sprintf(TempBuf, "%d%d%d%d%d", tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この時TempmBufの大きさは longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 shortを整数にした時の最大桁数 + 改行(\r) です。 |
すいません。訂正です。 >この時TempmBufの大きさは >longを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + shortを整数にした時の最大桁数 + >shortを整数にした時の最大桁数 + 改行(\r) >です。 改行(\r)でなくてNULL文字(\0)でした。 |
> sprintf(TempBuf, "%d%d%d%d%d", > tes_s.test_1, tes_s.test_2, tes_s.test_3, tes_s.test_4, tes_s.test_5); この方針は、 >>1512 gixs の最後で書いた、数値を文字列として渡す方法ですね。 (つまり、数値10を0x31 0x30のバイト列にしてしまう方法です) 受け手は、自前のパーサなりsscanf(3)なりで、パースして数値に戻します。 でも、"%d%d%d%d%d"ではパースできません。 ゼロ詰めで桁数を決め打ちするか、空白で区切るべきでしょう。 このように文字列で渡す方針が簡単なので、実用アプリならこうすべきですが、どうしても数値のままネットワーク上に流したいとのことなら、ネットワークバイトオーダに変換しながらmemcpy(3)(or memmove(3))します。 # 動かないコードでもいいように、疑似コード(エラー処理なし)。 # および、勝手に、uint32_t tes_s.test1; uint16_t tes_s.test2;ということにします。 char *p = buf; uint32_t x32 = htons(tes_s.test1); memcpy(p, &x32, sizeof(uint32_t)); p += sizeof(uint32_t); uint16_t x16 = htons(tes_s.test2); memcpy(p, &x16, sizeof(uint16_t)); p += sizeof(uint16_t); ... write(sock, buf, p - buf); 受け手は、どういうbit数の数値がどう並んでいるかを知った上で、受けたバッファから数値を切り出していきます。 |
ひとつ訂正。 最初のhtons()はhtonl()。 # 掲示板への書き込みは難しいですね。他にもミスがあるかも。 |
Perlで system関数||die"$!\n"||exit(0); を使用すると「ファイル番号が違います」とエラーメッセージがでて以上終了を起こします。 こういったエラーの理由が分かるサイトなどありましたら教えて下さい。 またこのエラーの原因をご存知の方がいましたら原因を教えて下さい。 お願いします。 |
はじめまして。 perlで、メール本文の内容を分析し、 mimeまたは、プレーンテキストの初めの文書の最終行番号、 mimeのときにテキストがなければ、最初の本文の行番号というように 調べたいのですが、どうすればよいのかわからなくて困っています。 なにか便利なツール、パッケージなどあれば教えてください。 それか調べるポイントでもあれば教えてください。 どうかよろしくお願いします。 |
>>1553 CoreFighter CoreFighter さんへ。質問に対する回答をもらっても、 何の反応も示さないなら、質問するのはご遠慮下さい。 >>1570 E田 > char型のデータでないとソケットでは送れないので わかっておられるのかもしれませんが、それは write_sock が そういう書き方になっているからで、本来はソケット経由で バイナリデータを送れます。 >>1571 けんす > なんかバグらしいです、、どうなんだろう、、。 なるほど。 # しかし素晴らしい検索能力ですね。バグだとは想像も # しませんでした。 >> OCTO って何ですか? > http://www.oc.to/ ここのサーバー借りてるので ただ単にドメイン名入れてみただけなんでしょうか。 > ディレクトリーリストに表示されるアイコン集、みたいなページ > ご存知ないですか?? ちろっと探してみましたが、見つかりませんでした。 20x22 だし、適当にでっち上げるのが簡単かもしれませんね。 >>1572 rocky > PERL5でHTTPクライアントを作る際、SSLで > 接続する方法を解説頂いたページを掲載して欲しいのです。 SSL のライブラリを使わず、ですか? そりゃまた難しそうだなぁ。 興味はあるので書きたいところですが、あまり期待しないで下さいね。 >>1577 rererenore さようなら、断りなしにマルチポストする無礼なひと。 >>1578 たろ 「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが なければ」とかの条件がよく理解できませんでしたが、とりあえず >>700 68user が一番お手軽だと思います。 |
68USERさん、お返事ありがとうございます。 レンタルサーバーなのでMAKEを使うライブラリのインストールができなくて何でも自力でやっております。 SSLの件、気長にお待ちしておりますのでどうかよろしくお願い申し上げます。 |
こちらのサイトで得た知識を、下記するところに記入いたしました。 http://www.tnetbbs.com/phorum/read.php?f=4&i=575&t=406 事後報告、かつ、つたない紹介となりましたことをお許しください。 とりいそぎ、ご挨拶まで。 |
>>1579 68user お返事ありがとうございます。 >「mimeまたは、プレーンテキスト」とか「mimeのときにテキストが > なければ」とかの条件がよく理解できませんでしたが、とりあえず マルチパートかシングルパートか、でした。失礼しました。 マルチパートで最初のテキストタイプの箇所に文言を追加したいと 思っています。 マルチパートで、文書がないときには、テキストパートを追加します。 ネットワークの知識が少ないのが悲しいところです。 |
>>1582 たろ >ネットワークの知識が少ないのが悲しいところです。 誤解を招くかもしれないので、補足します。もちろん自分のことです。 |
はじめまして。 突然何? という感じかもしれませんが、このサイトは非常にすばらしいと思います。 自分はPerl屋なのですが、ここほど為になるサイトは今まで見たことがありません。 HTTPクライアントは特に参考になりました。 ありがとうございます。 すばらしい情報が得られる貴重なサイトですね。 あまりの感動につい書き込んでしまいました。 掲示板の趣旨に反していましたら、お詫び致します。 |
みなさん、回答をありがとうございます。 やってみて、うまく格納できているみたいです。 今は、read()の方をうまくできていないので、ちゃんと 受け取りの構造体に格納できないので、これからなんとか 受け取り側で見れるようにします。 でも、うまくCを書けていなかったのがわかりました。 本当にありがとうございました。 |
以前は、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を解除する) よろしければ、皆様のご意見を頂きたく思います。 都合上レスが明日になるかもしれませんがよろしくお願い致します |
初めまして。 現在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()を発行すればよいと思うのですが なぜこういうケースがでるのかわからなければ 信用し得る修正にならないので書きこみさせてもらいました。 過去ログなどを検索して調べてみましたが 自分なりのなっとくいく回答がえられませんでした。 よければこういうケースになる条件、回避方法等 お教えいただければと思います。 |
追記ですが、下記のプログラムは 1ポート1コネクションのプログラムです |
>>1553 CoreFighter > CoreFighter さんへ。質問に対する回答をもらっても、 > 何の反応も示さないなら、質問するのはご遠慮下さい。 すいませんでした。以後気をつけます。 |
自己回答。先ほど質問を書きこんだものですが、 あれからいろいろサイトなどを再びまわって 間違いに気づきました。 お騒がせしました。 ようは 1ポート1コネクションなら select()の第一引数に取得したソケット記述子+1を指定すれば よかったんですね。 |
>>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 くらい 役立つレベルになりたいものです。 |
変な名前ですいません。 SystemVと呼ばれるOSがあるそうなのですが、 'システムブイ'か、'システムファイブ' どちらが正しい言い方なんでしょう? |
>>1592 バス酔いで思わずコアダンプ SystemIII の後継なので、システムファイブです。個人的には 話すときはシスブイと呼びますし、一応まわりには通じているようですが、 世間一般の人にシスブイと言ってわかってもらえるかは謎です。 # 検索すると http://www.system-v.org/ ってのが引っかかった。 |
>>1591 68user >はどうでしたか。僕は multipart をばらすところまでしか > やってませんので、(必要かどうかわかりませんが) 編集後に > 再構成できるのかはわかりません。 どうもです。 MIME-TOOLSのexampleを見て、今手探り中です。 一度、multipart をばらして、対象のテキストパートから数えた行数を 取得後、multipartをばらしていない本文より行数を取ろうと思います。 ばらしたものよりの再構成は、(むずかしそうなので)とりあえず避けます。 |
今課題で、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?) といった、エラーが出ます。どうしたらよいでしょう。 |
cronを実行していたのですが、 マシンの時間を修正した後、cronが実行されなくなりました。 何が原因か、どうすれば実行するようになるのか、 どうか教えていただきたいです。 |
cronを実行していたのですが、 マシンの時間を変更した後、 実行されなくなってしまいました。 どうしたらよいのでしょうか? |
>>1595 じゅじゅ > 今課題で、UNIXにApacheを入れ、フリーの掲示板を > ダウンロードしてとりつける課題をしています。 最近どうして こんな変なのばっかりわいてくるんだろう。 マルチポストする人はさようなら。 >>1596 クーロン > cronを実行していたのですが、 理由はわかりませんが、cron daemon を再起動するのがお手軽で しょう。特にサーバマシンに言えますが、なるべく時刻は date や ntpdate を使わず、xntpd などで設定しましょう。 |
はじめまして。 UNIXのことあんまり知らない初心者のものです。 先日TELNETが使えるレンタルサーバを借りたはいいけど、なんとその2週間後! TELMETが禁止に、、、ってことで、ついでにCORNTABも禁止に。。。 こんな悲しいことってアリッ!!?TELNETが使えるから借りたのに!!!ガビーーン! ・・・ぐちっぽくなってゴメンなさい。 そんなこんなで、質問をさせてください。 TELNETが禁止のサーバで、CRONTABみたいに定期的にパールスクリプト実行できるテクニックってありますか? よい方法を知っている方がいたら、なにとぞ教えてくださいませ☆ |
ごめんなさい、マルチポストの意味がよく わかりません。とりあえず、ご迷惑をおかけしたようなので 他のところへ聞いてみたいと思います。 もう来ませんので許してください。 悪気は一つもなかったんですから。 |
>>1577 rererenore >さようなら、断りなしにマルチポストする無礼なひと。 >>1595 じゅじゅ >> 今課題で、UNIXにApacheを入れ、フリーの掲示板を >> ダウンロードしてとりつける課題をしています。 >最近どうして こんな変なのばっかりわいてくるんだろう。 >マルチポストする人はさようなら。 本当に困っているから複数のサイトで質問しているだけで何が無礼なのか分かりませんが。 全てのレスに対してお礼を書けば問題ないと思いますが? 何に対してむかつかれているのか全然分かりません。 嫌なら掲示板のどこかに書いておけばいいと思いますが「使い方」の方にすら書かれてもいないようですし。 あなたの方がよほど無礼だと思いますが。 |
>>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より優れているのは、これだけ。 |
>>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 |
おっとリンクミス。 >>1603 68user (実際はもっと長文) 投稿しようとしましたが、その前に http://www.parkcity.ne.jp/~chaichan/qanda/qa579.htm?01-01-18-16-56 を見たところ、同じ質問が書いてあり、 でした。 |
>No. 1603 68user 2001/01/18 (木) 22:15:59 おっしゃる事は理解できますし、言われてみればもっともな考えだとは思います。 しかし、それはあなたがたのこういった世界に付いて詳しい方々の考え方であってわれわれの様な素人や、始めたばかりの人には情報の共有と言った概念は言われなければ無いと思います。 一言書かれていればこういう事態も避けられると思います。 今後は私も気を付けます。 |
>>1605 rererenore そうですか。では、使い方のところに その旨書いて おくことにします。 |
はじめて発言します。 実はUNIXはまだ初心者ですが・・ 下記のようなツール(C言語用ライブラリでも可)を探しています。 ・コマンド型ツールでメール層送受信が可能なもの かつ、添付ファイルが遅れるもの かつ、Solarisで動作するもの ・・って、ありますか? どなたか知っている方いましたら教えてください! (できれば、メールアドレスに送付してくれれば、なお可) |
先ほどの発言にて誤字・脱字が多いので再送します。 下記のようなツール(C言語用ライブラリでも可)を探しています。 ・コマンド型ツールでメール送受信が可能なもの かつ、添付ファイルが送れるもの かつ、Solarisで動作するもの ・・って、ありますか? どなたか知っている方いましたら教えてください! (できれば、メールアドレスに送付してくれれば、なお可) |
この掲示板を利用しているみなさん、ほんとうに私事で ご迷惑をおかけしました。実際私が投稿したことは 自分本位であり、みなさんの迷惑にしかならず 間違っていたことと理解しています。 しかし課題の締め切りが迫ってしまい、日々の勉強している ことの範囲外の課題であったために、調べる時間も少なく このような事態を引き起こしてしまいました。 本当にご迷惑をおかけしました。 しかし、管理者さんのこの掲示板の意図を知ることが できたので自分ではとても勉強になりました。 知識不足、常識不足ですいませんでした。 結局掲示板の設置の方は、その改行コードの変更の仕方が よくわからなかったので、あらかじめ改行コードが UNIXで設定されているものをダウンロードし、 confファイルを手直しして、設置することができました。 ありがとうございました。 |
あえて、クロスポストに答える形で書き込みます。 ちょっと面白いこと(だから内容はマニア向け)があり、 それを書いてみたいので...。 >>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) オプションというのはご存知でしょうか? # まあ、皆さん知っているでしょうね。この程度なら。 # 長くなりすみません。 |
>>rosegardenさん 教えてくださってありがとうございます。 残念ながら今すぐ自分ではまだ理解はできていませんが いまから勉強して覚えたいとおもいます。 ありがとうございました。 |
>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)を打ちました。 もし、これに関しても何か思い当たる点があれば、教えていただけたらうれしいです。 よろしくお願い致します |
こんにちは。 こんなことをお聞きするのは失礼かもしれませんが、 他になかったので失礼します。 よく企業のホームページなどで入力した数字をもとにシミュレーションをし、 計算結果を出力するようなページって多く有りますよね。 私もそのようなページをCGIで作製したいと思いいろいろな参考ページを見ましたが、 思うように解説ページが見つかりませんでした。 もし、入力した数値を計算し、結果を出力するようなサンプルを置いてあるページについて 何か思い当たる点があれば教えていただけないでしょうか。 本当にこんなしょうもない質問ですみません。 よろしくお願いします。 |
>>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 とかのマニュアルもありますね。 すごいですね。 |
>>1591 68user レスどもです。 ret = select( 64, &work_fdset, NULL, NULL, &time_out ); と指定していたので、ファイルディスクリプタ 0〜64までをチェックしかselectはチェックしていなかったので selectはタイムアウトを返し、実際取得したファイルディスクリプタは 64を超えた数になっていたのでFD_ISSETは反応を返した。 というふうになっていた模様です。 ちなみに、ファイルディスクリプタの番号を ここからここまでの番号しか取得しない。とか制限かける方法とか ないのでしょうか? |
レス遅くなってごめんなさい。 >>1525 68user >2. 相手側がコネクションを切断したときも select は 1 を返します。 > その際、recv すると1バイトも読めず、0を返しているはずなのに コネクションが切断したときのselectの返り値、recvの返り値については このレスを見て初めて知りました。ありがとうございます。 >>1526 68user >ついでに言っておくと、状況にもよりますが、select に ><> や read を使うのは不適切です。select で読み込み このサイトで紹介されているECHOサーバのように、「クライアントやサーバーとうま く接続できたかどうかを確認する」、というような形が正しいselectの使われ方だと 考えてもいいですか? alarmを使う事でブロッキングを強引に回避するという方法がありますが、他に 比較的OSに依存しない形でブロックを避ける手段はないでしょうか? |
>>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)でしょうか。 |
>>1612 YAGI氏 # その場に行けば解決できるかもしれませんが、このやりとりでは、助けられる自信はありません。申し訳ないです。 > 当人まだ、知識が乏しく本にsmitとsmittyが書いてあったりもするのですが > 区別が分からずsmitでやってました^^; X以外でsmitを起動すると、tty版のsmittyと同じ動きなので、 > なお、smitのコマンド類はWinNTのTera Termより発行しています。 smitでもsmittyでも変わりありません。 # という事は、走る男を見ていないんですねえ。 # もしかして一度も見たことが無い、とかだったら不幸です。 > 私も、その手順で実際に行なってバージョンアップしたClientをもう一度 > NISの再設定を行ってServerのマップをmakeし直すと > 接続できなくなってしまうのです。 うーむ、あまり他人の文章のケチをつけるのもなんですが、何をどういう順序でやったのか、いまいち不明です。 (改行の位置に読点があると考えてよいのでしょうか。 この手の説明は、時系列に並べた箇条書の方が分かりやすいと思います。) |
>>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. とありますので、あまり神経質になるほどのことでもないかも しれません (し、そうでないかもしれません)。 |
繁盛しているのはいいけれど、返事が大変だなぁ。 >>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 まで処理が 進み、正常にタイムアウト処理が行えます。 |
>>1613 ゆっきー > もし、入力した数値を計算し、結果を出力するような > サンプルを置いてあるページについて何か思い当たる > 点があれば教えていただけないでしょうか。 たとえばどのような計算をしたいのですか? テキストボックス1とテキストボックス2に数字を入力させ、 ボタンを押すと、2値の和を表示する CGI プログラムは 書けますか? >>1599 キチキチ そんな腐れサーバとは早く縁を切りましょう :-) > TELNETが禁止のサーバで、CRONTABみたいに定期的に > パールスクリプト実行できるテクニックってありますか? crontab 自体の使用が禁止されておらず、なおかつサーバ管理者を 敵にまわしてよいなら、CGI プログラムから crontab を設定する とか、~/.forward に crontab を設定するように仕込んでおいて メールを投げるなどの方法はあります。でも、お薦めしません。 あと、外部から定期的に指定の URL にアクセスしてくれる サービスがありますので、それを使って CGI プログラムを 一定時間ごとにアクセスさせるってのもあります。 確か webtimer って言ったかな。検索して探してみてください。 |
>>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 にはないかな。 |
>>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 は知らなかった。これ便利ですね。 |
>>1622 68user > これは tcsh や bash が端末ドライバを経由せずに、直接キー入力を > 取得しているからです。これを canonical モードといいます。端末の中で > 動く mule や emacs や vi もcanonical モードになっているわけです。 > これらは端末ドライバを経由していないので、stty の設定とは無関係です。 ttyドライバは経由してるけど、canonicalはほぼ素通しなモードなので、直接取ってるように見えてる。 コントロールコードは、sttyでの設定と同一のものを使用するプログラムが多い。 が正確でしょう。 canonicalモードとrawモードの違いを述べよ。 |
>>1621 68user >確か webtimer って言ったかな。検索して探してみてください。 それ,私のです(泣). >>1599 キチキチ WebTimerは http://jp.usami.com/~robot01/ です.我が家の自宅サーバーからつつきます. とりあえず'98夏から動いてます. 最近メンテしてませんけど,よかったらどうぞ... |
>>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 って言ったかな。検索して探してみてください。 > それ,私のです(泣). 失礼しました (^^; お肉さんのとこで見た記憶はあったのですが。 |
>>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 があるとトラブるそうです。 これは、どこかのメーリングリストで見た記憶があるのですが、 失念しました。 |
>>1621 68user ご指導、ありがとーございました☆ > サんな腐れサーバとは早く縁を切りましょう :-) たしかに、おっしゃるとーり... 予告なしに、TELNETもSYSTEMに影響することが全面禁止なんて、洒落にもなってないです(^^; 他のサーバを探してみたら、よさそうなのがいろいろ見つかりました。 頑張っていいサーバを探してみることにしまーす。 >>1625 Netboy >WebTimer アドレス感謝です☆ 今は必要なくなりそうですけど、 WebTimerにお世話なるときがきたら有難く使わせてください。 そのときはよろしくお願いします。 |
はじめまして。どこで聞いたらいいかと探し回った挙句、ここを見つけました。 どうか質問させてください。 私のプロバイダはメールにqmailを使っていて、転送の設定などを行う際に、 .qmail というファイルをホームに置くことになっています。 プロバイダ曰く、「当社はqmailを無加工で設置しています。.qmailの記述内容に関するお問い合わせはご遠慮ください。」 だそうです。 単純な転送の仕方などはわかるのですが、他にどんなことができるのか調べようにも ネット上に見つかるリソースはqmailの設置や管理の仕方などばかりで、一般ユーザの使い方には ほとんど触れられていません。 どこかに .qmail というユーザが設置する設定ファイルについて詳しくかかれている サイト等はないでしょうか? よろしくお願いいたします。 |
>>1629 ラルフ > どこかに .qmail というユーザが設置する設定ファイルについて > 詳しくかかれているサイト等はないでしょうか? http://www.jp.qmail.org/ より、付属文書 -> dot-qmail とたどって、 http://www.jp.qmail.org/q103/jman5/dot-qmail.html ですね。 |
Western Digital Caviar33100をインターネットオークションにて購入した者ですが、FDISK.EXEにてフォーマットをするとDOS領域作成に非常に時間がかかります。 故障しているのでしょうか。 故障しているのでなければ、何か良いフォーマット方法を教えてください。 ちなみに自分が使用しているパソコンは、NEC製のPC9821V13です。 |
Windows3.1用のグラフィックアクセレータOEM設定ファイル(*.INF)を探しています。提供しているサイト等はないでしょうか? ちなみに自分が使用してパソコンは、NEC製のPC9821V13で内臓アクセレータGD5430(Cirrus)とハイカラーグラフィックアクセレータPCIボード(NECのPC9821Xaに付属していたもの)です。 MS―Windows3.1のフロッピーディスクにはOEM設定ファイルがありませんでした。 宜しかったら、OEM設定ファイルの提供をお願いします。 |
>>1631 伊部 茂平 >>1632 伊部 茂平 Windows について質問するなら、 http://www.so-net.ne.jp/ClubHouse/room/pc_scramble_win/pc_scramble_win.html あたりが適当でしょう。 |
>>1621 68user >テキストボックス1とテキストボックス2に数字を入力させ、 >ボタンを押すと、2値の和を表示する CGI プログラムは >書けますか? それも書けないちょー初心者です。 こんなものが発言するのって間違いですね。 |
はじめまして 以前pop3,smtpのプロトコルについて調べたときに訪れて以来、 いつも楽しく拝見させてもらっています 好奇心的疑問で、特別切羽詰まってるわけではないのですが、 もしよかったら少しお付き合いのほどを… 現在一般的には、NATを使ってるLAN内の特定の端末に、 外部からアクセスすることは不可能と言われてますよね? 友人に尋ねたら、”RASがあるよ”といわれて調べてみたのですが、 ”プロバイダに繋ぐ代わりにRASサーバに繋いで、LANの端末の一部になる” というのが私のイメージでした。 そこでふと思ったのですが、常時接続している端末がRASを使ったら、 プログラム的にはどうなるんだろう、ということです 物理的に出口は二つあるのですが、 単純にIP解決の順番が複雑になるということなのでしょうか? 一つの端末に二つのIPを振るようなことになる気がしますが、 そもそもこんなこと可能なのでしょうか? 何か情報がありましたら、よろしくおねがいします |
>>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 で見られます。 |
どこ探せばいいのかも解らず、やっとの思いでここに辿り着きました・・ホッ。 「フォアグランド」「バックグランド」について教えて頂きたく思います。 現在、会社のDB更新(Oracle7)をフォア〜で行っているのですがこれをバック〜に変更すると何かメリットが出るのでしょうか?! 「バック〜に変更しよう」案が出ており、上司から「何か違うの?」と聞かれ、言葉につまっております。助けて下さい。。 |
>>1637 HANA > 現在、会社のDB更新(Oracle7)をフォア〜で行っているの > ですがこれをバック〜に変更すると フォアグラウンドで更新というのはどういう意味ですか? 例えば sqlplus をコマンドラインから叩いているという 意味ですか? |
>>1636 68user なるほど、経路という概念があったんですね 設定運用等に関してはまるで無知ということが改めてわかりました(笑) インターフェイスごとにIPを振るというのも、いわれてみれば納得です 本の説明なんかじゃ、端末にIPを振るという感じで説明されてるので、 すっかりそういうものだと思ってました NICを指定してIPを振ったという事実も忘れて… 思い込みとはかくも恐ろしい(笑) 回答ありがとうございました |
No.1637の付け足しです。 すいません、よく解っていなくて。 Cで書かれているバッチJOBがあり、それが動いているのがフォア〜で見えているという感じです。 |
linuxのネットワークがどうも調子が悪いようなのです。 ファイルを転送(ネットワークに負荷がかかると)すると途中でネットワークがつながらなくなってしまいます。システムがおちているわけではなく、その後シャットダウン+電源を一度ぬく+linux起動で再びネットワークはつながります。しかし、電源を抜かずに再起動してしまうとネットワークはつながりません。マシンの環境は、WinNT4.0とTurbolinuxがインストールされていてLANにつないでいます。 解決方法を知っている方がいましたら宜しくお願いします。 |
>>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 などとするのではだめなんでしょうか? (上のコマンドライン例は適当です)。 # 最近、ポカが多いから、自信ないですけど :-{ |
>>1641 sato そもそも NIC の型番を書かないと、根本解決には至らない でしょう (書いてもらっても僕はわかりませんが)。 繋がらなくなったら一度 ifconfig [interface] down して、 ifconfig [interface] up すれば直るのかもしれませんが、 しょせん対処療法ですね。 >>1640 HANA > Cで書かれているバッチJOBがあり、それが動いているのが > フォア〜で見えているという感じです。 C で書かれている DB 更新用コマンドがあるのですね? それをコマンドラインからタイプしている、ということを 指してフォアグラウンドで動かしている、と表現している のですね? UNIX 的な意味で「バックグラウンド」と言うと、 % foo & と & を付けてコマンドを実行することですが、これを 行いたいのですか? もしそうだとしたら、なぜですか? |
>>1642 rosegarden > そうなのでしょうか? port forwarding あるいは port redirection > を併用したら、可能なような気がしていますが ちょっと実験して見たけど、port forwading 程度じゃ無理みたいですね。 ifconfig alias 使った時には、うまく jail へ port forwarding できたのに。やはり物理的に別マシンだとむりなんでしょうか? |
>>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 アドレスで バーチャルホストができるんですけどね。 |
何度もすいません。バックグラウンドで動かした方が、フォアグラウンドで 動かすよりメリットがあると言われました。早い,コンソールがフリーズ しても問題なくバッチが終了する。。。事実でしょうか? 他にも”DB更新バッチ”を動かすのに何か違いがでるのでしょうか? |
>>1646 HANA はぁ、こっちの出した問いには答えず、質問するのみで 疑問を解決しようとは、こりゃまた人をなめた話ですね。 以下、詳しく説明する気はなくなったので独り言。 興味のある人は突っ込んで下さい。 > 早い 速さは変わりません。 > コンソールがフリーズしても問題なくバッチが終了する 端末からログインして実行すると、接続が切れたとき HUP シグナルが飛んできてプロセスは終了します。では バックグラウンドなら OK かというと、たしかシェルに よるんだったかな。bash なら & を付ければ nohup 相当 のことをしてくれたかもしれない。tcsh なら & を付けても、 接続が切れれば SIGHUP が飛びます。 |
そういうつもりは全くなかったのですが、結果的に問いに答えず質問だけ してしまった様です。すいませんでした。 バックで動く様、自分たちで変更するのではなく、”依頼”する為、それが 「&」をつける事なのか解っていないのが事実です。”その方が良い らしい”と、根拠のないまま話が進んでいる状態の為何が違うのかと思い すがる様にメールしてしまいました。本当に申し訳ございませんでした。 |
皆様はじめまして。 私は現在 perl で SOCKS クライアントを作成しようとしているものですが、なかなか資料も少なく煮詰まっております。(c はまったく分かりません) RFC や NEC を読んでもうまく SOCKS サーバーに送信できないのです。 どなたか SOCKS に詳しい方、ご教授いただけないでしょうか? |
>>1648 HANA あなたが困っているらしいことは、とてもよくわかるのですが、 ここで書き込みを見ている人にとって、お困りの問題を把握するための 情報源はあなたの発言だけであることを御理解下さい。 問題を解決するためには、目標が何であるのか、現状がどうなっているのか、 ということが把握できなければならないのはどんな世界でも共通ですし、 おわかり頂けることと思いますが、 今の状態では現状把握のための情報が圧倒的に不足していますので、 おそらくほとんどの人は、あなたの質問に答えることができません。 もしまたこの掲示板にしろ別の場所にしろ質問なさるようでしたら、 その辺りに十分気を使うべきであるということを誤認識下さい。 # 余計な発言でしたらごめんなさい |
>>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 はあまり考えて書いていないので、 # 多分突っ込む余地は沢山あるかと思います。 |
>>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 なんか使いませんが。 |
>>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 (このページおもしろい) |
むむ、どうやら私の書き方は、かなり不適切だったようです ”特定”ではなく、”任意”という言葉を使うべきでした 内から外はNATが使えるけど、外から内は何を使うのか というのがそもそもの疑問だったのです 結局RASも内の一部になるという技術のようですし、 IPv4のうちは、外から内は実質不可能なのかな、というのが感想です お二人のNATの説明はとても参考になりました まだしばらくはNATのお世話になりそうですしね |
>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ファイルなど があれば、教えていただけると、非常にうれしいです。 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します |
> 文章の書き方はすみませんでした。 いえいえ、人のことを言えるほどでもありませんので。 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を先に見ていないと判断できます。 > 毎回毎回、分かり図らい文章だと思いますが、よろしくお願い致します # どうでもいい突っ込み。 # 「わかりづらい」なら、この誤変換は出ないと思います。 |
>>1653 68user 様 >Net::SOCKS モジュールが参考になるかもしれません。 レスありがとうございます。 Net::SOCKS を使ったソースを参考にがんばってみたいと思います。 |
>gixs様 >smitty mkclientの時、NISサーバはホスト名で入力したのでしょうか、 >それともIPアドレスですか? この画面なのですが、AIXのバージョンが4.2.1の為に smitty mkclientで表示される画面が、 「* NIS クライアントを開始する時期 両方」 しか、表示されないのです >ypcat passwdが応答の無い時、 >ping [NISサーバのホスト名] >の応答はあるのでしょうか? 試して見たのですが、応答ありませんでした。 ># 「わかりづらい」なら、この誤変換は出ないと思います タイプミスで「わかりずらい」と打っていました。^^; |
はじめまして。 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', ); ご助言、よろしくお願いいたします。 |
>>1659 kaori - IPv6 環境が構築してあるか。ping6 コマンドを使って IPv6 で反応が返ってくるか (localhost 宛でもよい)。 - perl が IPv6 に対応しているかどうか。perl-5.005_03 なら多分 無理。5.6 か 5.7 で対応したかもしれません。Socket6 というのを 使えば 5.005_03 でもいけるのかもしれませんが、僕は試したことが ありません。 それをクリアすれば、少しの例外を除いて基本的には書き方は同じです (そうしないとソースレベルでの互換性が全くなくなるので)。例外と いうのは gethostbyname の代わりに getaddrinfo を使うとか。 とりあえず perldoc Socket6 してみてください。サンプルの ひとつでも載っているのではないでしょうか。 |
>>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 を使ったことさえ ない) のたわごとでした。 |
しつこくて失礼。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. だそうで。原因究明はまた後日…と言いたいところだけれど、 こりゃ僕のレベルではいかんともしがたいですな。 |
あーしつこい。でも初 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 です。 |
> この画面なのですが、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アドレス] でうまくいくなら、それで結果オーライにしてしまってよいのではないでしょうか。 |
kaoriです。 ご丁寧な回答ありがとうございました! IPv6の環境は整っています(OCNの実験に参加しています)ので、 教えて頂いたのを参考に色々試してみます! > というわけで、IPv6 only のプログラムは簡単に書けますが、 > 書いちゃいけません。IPv4/v6 両方で動くようなプログラムを > 作るべきです。 本当にその通りですね。 アドバイスありがとうございます。 今後もよろしくお願いします! |
ちょっと便乗して試して見たのですが、 >>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; } |
>>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; # 穴があったら入りたいです。 |
>>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 様ならびに皆様、再三のゴミ書き申し訳ありません。 |
>>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 のどちらが上にあるか) に よって変わるようです。 |
ぐぅ、あほだ。 >>1669 68user > print <Sock> そりゃ動かんわな。$buf = <Sock>; print $buf か print scalar(<Sock>) でした。失礼。 |
>>1667 rosegarden > socket(Socket_Handle, $family, $socktype, $proto) || next; > のミスじゃありませんか? で、これどうしましょうかね。 Hajimu UMEMOTO <ume@FreeBSD.org> 宛に投げればよきにはからってくれるでしょうけど、僕が連絡しても いいですし、rosegarden さんが既に連絡済みであればそういうことで。 |
すみません、ちょっと横になっていました。 >>1671 68user > Hajimu UMEMOTO <ume@FreeBSD.org> > 宛に投げればよきにはからってくれるでしょうけど、 68user さんお願いできますか? ちょっと今はメール出せません。 それから ::1 と 217.0.0.1 について有難うございました。 |