Strawberry Perl 5.16.3とNet::LDAP 0.65で、Bad File Descriptorが発生した。IO::Socket::IP(この時点で0.37版)をインストールしたところ、解消した。
詳細
エラー
該当部のコードは下記のsearch
行。
my $ldap = Net::LDAP->new("$ldap_serv:$ldap_port") or die "$@";
my $mesg = $ldap->search(base => $ldap_base, filter => 'mail=tsukamoto@example.com');
以下のエラーになった。
Bad file descriptor at xxxxxx.pl line xx, <DATA> line xxx.
対応
以下の2モジュールを更新したところ、エラーが解消された。
- IO::Socket::IP
- Net::LDAP(perl-ldap)
最初に、Net::LDAPが旧い可能性を考えて更新したところ、0.65版がインストールされ、エラーは変わりなかった。次に以下の2件を参考にIO::Socket::IPを更新したところ、0.37版がインストールされ、エラーが解消された。
-
Net::LDAP fails with latest ActiveState Perl, can be worked round byrenoving INET6.pm - nntp.perl.org
Bad File Descriptorが発生し、IO\Socket\INET6.pm
をリネームした(機能しなくした)ら解消したとの投稿。 -
Re: Net::LDAP fails with latest ActiveState Perl, can be worked round by renoving INET6.pm - nntp.perl.org
それはIPv6サポートを無効化する作業だけど、代わりにNet::LDAPの最新版とIO::Socket::IPを入れてみたらどうか、という投稿。