検索条件
全1件
(1/1ページ)
#!/usr/local/bin/perl # use utf8 ; binmode(STDOUT, ":utf8") ; use IO::Socket::INET ; # ソケットインタフェース使用宣言 $comm_queue = 5 ; # コネクション待ち受けキューの数 $port = 9999 ; # port no. ### 通信ソケット生成 # ソケットオープン $reqsock = IO::Socket::INET->new (LocalPort => $port, Listen => $comm_queue, Proto => 'tcp', Reuse => 1, ) ; if (not $reqsock) { err_trap("通信ソケットが作成できません。",$!) ; exit ; } ### サーバメインルーチン for (;;) { $sock = $reqsock->accept() ; if (not $sock) { err_trap("クライアントの要求受け付けに失敗しました。(accept error)",$!) ; exit ; } if ($child = fork()) { # 親プロセスの実行コード $sock->close() ; waitpid($child,0) ; next ; # 次のコネクション要求を待つ } elsif (defined($child)) { # 子プロセスの実行コード(メインルーチン) $reqsock->close() ; select($sock) ; $| = 1; # 常に flash するようにする select(STDOUT) ; binmode $sock ,':encoding(UTF-8)' ; 以下、サーバの処理プログラム・・・・ } }IO::Socket:INET の部分を、IO::Socket::IP に書き換えても、IPv6 しか受け付けない状態になります。
#!/usr/local/bin/perl # use utf8 ; binmode(STDOUT, ":utf8") ; use IO::Socket::INET ; # IPv4 Socket インタフェースライブラリ使用宣言 use IO::Socket::INET6 ; # IPv6 Socket インタフェースライブラリ使用宣言 use IO::Select ; $comm_queue = 5 ; # コネクション待ち受けキューの数 $port = 9999 ; # port no. ### 通信ソケット生成 $select = IO::Select->new ; # ソケットオープン[IPv6] $psock6 = IO::Socket::INET6->new (LocalPort => $port, Listen => $comm_queue, Type => SOCK_STREAM, Reuse => 1, Proto => "tcp" ) ; if (not $psock6) { err_trap("通信ソケットが作成できません。[IPv6]",$!) ; exit ; } else { $select->add($psock6) ; } # ソケットオープン[IPv4] $psock4 = IO::Socket::INET->new (LocalPort => $port, Listen => $comm_queue, Type => SOCK_STREAM, Reuse => 1, Proto => "tcp" ) ; if (not $psock4) { err_trap("通信ソケットが作成できません。[IPv4]",$!) ; exit ; } else { $select->add($psock4) ; } ### サーバメインルーチン for (;;) { while (my @ready = $select->can_read) { foreach my $reqsock (@ready) { $sock = $reqsock->accept() ; if (not $sock) { err_trap("クライアントの要求受け付けに失敗しました。(accept error)",$!) ; exit ; } if ($child = fork()) { # 親プロセスの実行コード $sock->close() ; waitpid($child,0) ; next ; # 次のコネクション要求を待つ } elsif (defined($child)) { # 子プロセスの実行コード(メインルーチン) select($sock) ; $| = 1; # 常に flash するようにする select(STDOUT) ; binmode $sock ,':encoding(UTF-8)' ; 以下、サーバの処理プログラム・・・・ } } } }参考になったのは、これ → How best to support IPv4/v6 in Perl server