🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.perl
Article #128

Re: select system call in Perl

#128
From: Hideyuki Endo
Date: Thu, 26 Nov 1998 00:00
46 lines
2169 bytes
えんどうです

rsekido@midicity.co.jp (SEKIDO Ryoichi) writes:
>Perl の select システムコールでよく分からないことがあるので,お尋ねします
>.
>クライアントからの接続を select で待ち受けて処理しようとしていますが,
>新しい接続を accept で受けても,帰ってくるファイルハンドルが1回目と同じに
>
>なってしまいます.そうではなくて,クライアント間のやりとりを仲立ちするよう
>な
>プログラムを作りたいのです.

ファイルハンドルに毎回おなじシンボル使っているからです。

perlfaq5にこのあたりの記述があります。 
How do I make an array of filehandles? あたりでサーチしてみてください。

古来から伝わる方法としては、最初に
$seq  = 0;
として、acceptのあたりを、

local $NS = `C` . ++seq;# `C`は単にユニークな文字列ってだけで、なんでもよい。
accept($NS, S);		# つまり、`C0`、`C1`、`C2` ...と云うシンボルが渡る
	:
vec($rmask1, fileno($NS), 1) = 1;
	:

とすると云うのがあります。毎回違う識別子を与えるのですね。

と、perlfaq5を見たら、perl5的には、同じことを、

use Symbol;
	:
my $NS = gensym();
	:
とするのですね。

あと、ついでですが、IPCに関する部分は、perl5ではもう少しきれいな書き方
ができますよ。perlipcをみてみたらどうでしょうか。

# それももう古いか……今はIO::Socketかな

では
はは
--
Hideyuki Endo				  endo-h@remus.dti.ne.jp
Technical Details
Message-ID: <wkbtlvyf5h.fsf@remus.dti.ne.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <rsekido-2511981308400001@news.navi-con.or.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 1043e7,fa75a01daeb606d9
X-Google-Attributes: gid1043e7,public
X-Google-Thread: fdef0,fa75a01daeb606d9
X-Google-Attributes: gidfdef0,public
From: Hideyuki Endo <endo-h@remus.dti.ne.jp>
Subject: Re: select system call in Perl
Date: 1998/11/26
Message-ID: <wkbtlvyf5h.fsf@remus.dti.ne.jp>
X-Deja-AN: 415553850
Sender: endo-h@KYTOMA
References: <rsekido-2511981308400001@news.navi-con.or.jp>
Content-Type: text/plain; charset=ISO-2022-JP
X-Emacs: Emacs 20.2, MULE 3.0 (MOMIJINOGA), Meadow-1.00 (MIDORI)
Organization: Dream Train Internet
Mime-Version: 1.0 (generated by SEMI 1.5.2 - "Kurobe")
Newsgroups: fj.lang.perl,fj.unix