検索条件
全2件
(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
===> Cleaning for ImageMagick7-nox11-7.0.8.22 ---> Cleaning out obsolete shared libraries No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5 No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5 No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5 No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5 No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5 No such file or directory @ realpath_rec - /usr/local/lib/compat/pkg/db5のようなメッセージが毎回出るようにになります。実害は無いのでほったらかし状態だったが、気になるものは気になるので、対策を。。
# cd /usr/local/lib/compat/pkg # ls -al lrwxr-xr-x 1 root wheel 22 7月 4 2018 libdb_cxx-5.3.so.0@ -> db5/libdb_cxx-5.3.so.0 lrwxr-xr-x 1 root wheel 18 7月 4 2018 libdb_cxx-5.so.0@ -> libdb_cxx-5.3.so.0 lrwxr-xr-x 1 root wheel 22 7月 4 2018 libdb_stl-5.3.so.0@ -> db5/libdb_stl-5.3.so.0 lrwxr-xr-x 1 root wheel 18 7月 4 2018 libdb_stl-5.so.0@ -> libdb_stl-5.3.so.0 lrwxr-xr-x 1 root wheel 18 7月 4 2018 libdb-5.3.so.0@ -> db5/libdb-5.3.so.0 lrwxr-xr-x 1 root wheel 14 7月 4 2018 libdb-5.so.0@ -> libdb-5.3.so.0実に簡単。上記6つのシンボリックリンクを削除するだけ。これで解決しました。