🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.perl
Article #127

select system call in Perl

#127
From: SEKIDO Ryoichi
Date: Wed, 25 Nov 1998 00:00
59 lines
2509 bytes
関戸と申します.

Perl の select システムコールでよく分からないことがあるので,お尋ねします
.
クライアントからの接続を select で待ち受けて処理しようとしていますが,
新しい接続を accept で受けても,帰ってくるファイルハンドルが1回目と同じに

なってしまいます.そうではなくて,クライアント間のやりとりを仲立ちするよう
な
プログラムを作りたいのです.

ソースの一部を下記に添付します.
どなたか分かる方がいらっしゃいましたら教えてください.
よろしくお願いします.


--- midiCity Co.,Ltd. -------------------------------------------------->
関戸 良一                                         rsekido@midicity.co.jp
SEKIDO Ryoichi                           Phone/Fax 03-5478-0821/5478-0820
<-------------------------------------------------- midiCity Co.,Ltd.----


$thisport = pack($sockaddr, &AF_INET, $port, "\0\0\0\0");

socket(S, &PF_INET, &SOCK_STREAM, $proto) ||
  die "Cannot create socket";
bind(S, $thisport) ||
  die "Cannot bind socket";
listen(S, 5) ||
  die "Cannot listen socket";
$rmask1 = '';
$rmask2 = '';
vec($rmask1, fileno(S), 1) = 1;
$rmask2 = $rmask1;

undef $list_fd1;
undef $list_fd2;
while (select($rmask2, undef, undef, undef) > 0) {
    for ($fd=0; $fd<$fd_setsize; $fd++) {
        if (vec($rmask2, $fd, 1) != 1) {
            next;
        }
        if ($fd == fileno(S)) {

# このaccept で NS が常に同じになってしまう.
            accept(NS, S) ||
              die "Cannot accept";

            vec($rmask1, fileno(NS), 1) = 1;
            if (! $list_fd1) {
                $list_fd1 = NS;
            }else{
                $list_fd2 = NS;
            }
        }
# 以下略
    }
    $rmask2 = $rmask1;
}
Technical Details
Message-ID: <rsekido-2511981308400001@news.navi-con.or.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 1043e7,fa75a01daeb606d9,start
X-Google-Attributes: gid1043e7,public
X-Google-Thread: fdef0,fa75a01daeb606d9,start
X-Google-Attributes: gidfdef0,public
From: rsekido@midicity.co.jp (SEKIDO Ryoichi)
Subject: select system call in Perl
Date: 1998/11/25
Message-ID: <rsekido-2511981308400001@news.navi-con.or.jp>
X-Deja-AN: 415405654
Content-Type: text/plain; charset=iso-2022-jp
X-Complaints-To: usenet@mars.navi-con.or.jp
X-Trace: mars.navi-con.or.jp 911967534 15244 210.153.93.248 (25 Nov 1998 04:18:54 GMT)
Organization: midiCity Co.,Ltd.
Mime-Version: 1.0
NNTP-Posting-Date: 25 Nov 1998 04:18:54 GMT
Newsgroups: fj.lang.perl,fj.unix