Skip Menu |

This queue is for tickets about the IO-Socket-SSL CPAN distribution.

Report information
The Basics
Id: 101160
Status: rejected
Priority: 0/
Queue: IO-Socket-SSL

Owner: Nobody in particular
Requestors: orbisvicis [...]

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)

Subject: IO-Socket-SSL: unexplainable closed filehandle
Date: Sun, 28 Dec 2014 00:16:43 -0500
To: bug-IO-Socket-SSL [...]
From: Yclept Nemo <orbisvicis [...]>
Download (untitled) / with headers
text/plain 10.8k
I've been trying to debug the ddclient package which suddenly stopped working. Here is an excerpt: require 5.004; use strict; ... use IO::Socket; ... $sd = IO::Socket::SSL->new( PeerAddr => $peer, PeerPort => $port, Proto => 'tcp', MultiHomed => 1, Timeout => opt('timeout'), ); defined $sd or warning("cannot connect to $peer:$port socket: $@ " . IO::Socket::SSL::errstr()); if (defined $sd) { ## send the request to the http server verbose("CONNECTED: using SSL"); verbose("SENDING:", "%s", $request); $0 = sprintf("%s - sending to %s port %s", $program, $peer, $port); my $result = syswrite $sd, $rq; if ($result != length($rq)) { warning("cannot send to $peer:$port ($!)."); } else { ... syswrite() on closed filehandle GEN1 at /usr/sbin/ddclient line 1888. Use of uninitialized value $result in numeric ne (!=) at ./ddclient line 1889. WARNING: cannot send to (Bad file descriptor). Since the above error only happens when libio-socket-inet6-perl is installed, I assumed I was running into an IPV6 networking issue. So I tried including 'use Socket;' and passing 'Domain => AF_INET,' to IO::Socket::SSL->new(...), however the problem persisted. I also attempted calling 'system("netstat -W -n -a -e -e -p | grep '$progname'")' after calling IO:Socket::SSL->new(...); however the list was empty. At which point I assumed the error was internal to IO:Socket::INET6. So I tried the following: require 5.004; use strict; use IO::Socket::INET6; use IO::Socket::SSL; use Socket; my $program = "tester"; my $peer = ""; my $port = 443; my $request = "test"; my $rq = "test"; # try swapping these # my $sd = IO::Socket::INET6->new( my $sd = IO::Socket::SSL->new( PeerAddr => $peer, PeerPort => $port, Proto => 'tcp', MultiHomed => 1, Timeout => 120, ); defined $sd or warning("cannot connect to $peer:$port socket: $@"); if (defined $sd) { print("CONNECTED: using INET6\n"); print("SENDING: ", $request, "\n"); $0 = sprintf("%s - sending to %s port %s", $program, $peer, $port); my $result = syswrite $sd, $rq; if ($result != length($rq)) { warning("cannot send to $peer:$port ($!)."); } else { print("sent\n"); } } Strangely enough, the IO::Socket::INET6 version works perfectly (see the commented lines) whereas the IO::Socket::SSL version generates the aforementioned issue. Hence this bug report; I am stumped. I've provided my perl/IO-Socket-SSL information: libio-socket-ssl-perl 1.965-1ubuntu1 libio-socket-inet6-perl 2.71-1 libsocket6-perl Summary of my perl5 (revision 5 version 18 subversion 2) configuration: Platform: osname=linux, osvers=3.2.0-37-generic, archname=i686-linux-gnu-thread-multi-64int uname='linux lamiak 3.2.0-37-generic #58-ubuntu smp thu jan 24 15:28:10 utc 2013 i686 i686 i686 gnulinux ' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Dldflags= -Wl,-Bsymbolic-functions -Wl,-z,relro -Dlddlflags=-shared -Wl,-Bsymbolic-functions -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=i686-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.18 -Darchlib=/usr/lib/perl/5.18 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.18.2 -Dsitearch=/usr/local/lib/perl/5.18.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -Uversiononly -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.8.2', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=4, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/i386-linux-gnu /lib/../lib /usr/lib/i386-linux-gnu /usr/lib/../lib /lib /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS PERL_DONT_CREATE_GVSV PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API Locally applied patches: DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - Remove overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information. DEBPKG:debian/enc2xs_inc - Tweak enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - Remove Errno version check due to upgrade problems with long-running processes. DEBPKG:debian/libperl_embed_doc - Note that libperl-dev package is required for embedded linking DEBPKG:fixes/respect_umask - Respect umask during installation DEBPKG:debian/writable_site_dirs - Set umask approproately for site install directories DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of libperl.a to /usr/lib DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or perllocal.pod for perl or vendor DEBPKG:debian/prefix_changes - Fiddle with *PREFIX and variables written to the makefile DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - Adjust Module::Build manual page extensions for the Debian Perl policy DEBPKG:debian/prune_libs - Prune the list of libraries wanted to what we actually need. DEBPKG:fixes/net_smtp_docs - [ #36038] Document the Net::SMTP 'Port' option DEBPKG:debian/perlivp - Make perlivp skip include directories in /usr/local DEBPKG:debian/cpanplus_definstalldirs - Configure CPANPLUS to use the site directories by default. DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl. DEBPKG:debian/deprecate-with-apt - Point users to Debian packages of deprecated core modules DEBPKG:debian/squelch-locale-warnings - Squelch locale warnings in Debian package maintainer scripts DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the upstream Git repository DEBPKG:debian/patchlevel - List packaged patches for 5.18.2-2ubuntu1 in patchlevel.h DEBPKG:debian/skip-kfreebsd-crash - [perl #96272] Skip a crashing test case in t/op/threads.t on GNU/kFreeBSD DEBPKG:fixes/document_makemaker_ccflags - [ #68613] Document that CCFLAGS should include $Config{ccflags} DEBPKG:debian/find_html2text - Configure CPAN::Distribution with correct name of html2text DEBPKG:debian/hurd_test_skip_stack - Disable failing GNU/Hurd tests dist/threads/t/stack.t DEBPKG:fixes/manpage_name_Test-Harness - [ #73399] cpan/Test-Harness: add NAME headings in modules with POD DEBPKG:debian/makemaker-pasthru - [ #28632] Make EU::MM pass LD through to recursive Makefile.PL invocations DEBPKG:debian/perl5db-x-terminal-emulator.patch - Invoke x-terminal-emulator rather than xterm in DEBPKG:debian/cpan-missing-site-dirs - Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is writable DEBPKG:fixes/memoize_storable_nstore - [ #77790] Memoize::Storable: respect 'nstore' option not respected DEBPKG:fixes/net_ftp_failed_command - [ #37700] Net::FTP: cope gracefully with a failed command DEBPKG:fixes/perlbug-patchlist - [3541c11] [perl #118433] Make perlbug look up the list of local patches at run time DEBPKG:fixes/module_metadata_security_doc - [68cdd4b] CVE-2013-1437 documentation fix DEBPKG:fixes/module_metadata_taint_fix - [bff978f] [ #88576] untaint version, if needed, in Module::Metadata DEBPKG:fixes/IPC-SysV-spelling - [ #86736] Fix spelling of IPC_CREAT in IPC-SysV documentation DEBPKG:fixes/fix-undef-source - Built under linux Compiled at Mar 27 2014 18:02:39 @INC: /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl . Sincerely,
Download (untitled) / with headers
text/html 13.7k

Message body is not shown because it is too large.

Download (untitled) / with headers
text/plain 445b
Thanks for your problem report. Unfortunately, I cannot reproduce the problem with your example program. From my tests has a single IPv4 ( and no IPv6 address, so I wonder why this problem should be related to INET6. Could you please run your tests with -MIO::Socket::SSL=debug4 ? Also, it would be good to use the latest version of IO::Socket::SSL. The version you use is nearly a year old. Regards, Steffen
CC: behroozi [...]
Subject: Re: [ #101160] IO-Socket-SSL: unexplainable closed filehandle
Date: Sun, 28 Dec 2014 19:39:43 -0500
To: bug-IO-Socket-SSL [...]
From: Yclept Nemo <orbisvicis [...]>
Download (untitled) / with headers
text/plain 725b
Show quoted text
> Thanks for your problem report. > Unfortunately, I cannot reproduce the problem with your example program.
Strangely enough, I can no longer reproduce the problem either. I installed libio-socket-ip-perl as a workaround, so that apps specifically requiring libio-socket-inet6 would continue to work while libio-socket-ssl-perl would prefer libio-socket-ip. In the meantime I realized my openssl CA store was out of sync (problems with SSL3_GET_SERVER_CERTIFICATE:certificate verify failed) and ran c_rehash as root. Now after uninstalling libio-socket-ip, I can no longer reproduce the issue. Everything is working smoothly. Strange... Anyway, thanks for the suggestions, and sorry for the transient report. Sincerely,
Download (untitled) / with headers
text/plain 133b
Show quoted text
> Anyway, thanks for the suggestions, and sorry for the transient report.
Good to know that it works now. Then I can close the bug.

This service is sponsored and maintained by Best Practical Solutions and runs on infrastructure.

Please report any issues with to