Revision history for IO-Socket-IP 0.39 2017/03/06 16:40:30 [BUGFIXES] * Handle EOPNOTSUPP in resposne of efforts to disable V6ONLY (RT119780) (thanks XENU) 0.38 2016/08/02 18:33:50 [CHANGES] * Support setting custom socket options with new 'Sockopts' constructor parameter [BUGFIXES] * Restore blocking mode after ->connect errors (RT112334) 0.37 2015/03/12 20:44:07 [CHANGES] * Earlier detection/reporting of erroneous Listen + Peer* argument combination; don't rely on resolveable hostname to do it (RT92930) [BUGFIXES] * Skip t/16v6only.t on irix (RT102662) * Remember to eval() $IO::Socket::VERSION in case it's a devel release (RT101954) * s/Port/LocalPort/ in unit tests (RT96064) 0.36 2014/01/10 20:54:58 [BUGFIXES] * Always bind() on MSWin32 because Windows doesn't like it if we listen() having not done so (RT101396) 0.35 2015/01/02 19:45:20 [BUGFIXES] * Restore blocking mode after timeout connect immediate success (RT100947) * Avoid CORE:: prefixing so global override modules work (RT101174) * Ensure that ->peer{host,port,hostname,service} never die even when unconnected (RT98759) 0.34 2014/12/03 00:04:56 [BUGFIXES] * Don't select() for read-readiness when waiting for non-blocking connect() because it upsets VMS (RT100654) 0.33 2014/11/21 16:17:39 [BUGFIXES] * Use SOL_SOCKET/SO_ERROR sockopt rather than 2nd connect() error hoisting to detect nonblocking connect/failure when implementing Timeout (RT98976) (thanks Arthur Axel 'fREW' Schmidt) 0.32 2014/09/12 10:11:27 [CHANGES] * Implementation of Timeout for ->connect (RT92075) 0.31 2014/07/11 01:24:49 [BUGFIXES] * A better fix for subclassing ->connect (RT95983) because 0.30 broke the way IO::Socket::SSL works (RT97050) 0.30 2014/07/03 23:28:43 [CHANGES] * Invoke $self->connect fully-qualified in case of subclasses with override (RT95983) * Added extra diag() call in t/15io-socket.t (RT96914) 0.29 2014/02/24 16:06:29 [BUGFIXES] * Workaround for OSes that disobey AI_ADDRCONFIG and yield AIs on families the kernel will not support anyway (e.g. HPUX) * Workaround for OSes that lack getprotobyname() (e.g. Android) 0.28 2014/02/10 16:17:59 [CHANGES] * Renamed internal _configure method to _io_socket_ip__configure to avoid clashes with modules that try to subclass IO::Socket::INET [BUGFIXES] * Disable AI_ADDRCONFIG during one-sided 'v6 tests as sometimes it would otherwise fail * Skip the SO_BROADCAST test on OSes that fail with EACCES (RT92502) 0.27 2014/01/20 18:08:31 [BUGFIXES] * Apply a short timeout to unit tests that probe for internet connectivity, in case of bad firewalls, etc... (Perl RT121037) * Defend against machines with IN6ADDR_LOOPBACK not being "::1" in unit tests, similar to the INADDR_LOOPBACK case (RT92295) 0.26 2014/01/16 12:20:02 [CHANGES] * Set $VERSION in BEGIN block before 'use base' so that Acme::Override::INET still works * Various minor improvements to documentation 0.25 2014/01/11 17:19:29 [BUGFIXES] * Allow both *Host with port and *Port arguments, letting port from Host argument take precedence (INET compat) * Ensure that a Host/Family-less constructor still constructs a socket, by using gai()s AI_ADDRCONFIG hint 0.24 2013/09/19 14:17:22 [BUGFIXES] * Defend against INADDR_LOOPBACK not being 127.0.0.1 on machines with odd networking (e.g. FreeBSD jails) during unit testing 0.23 2013/09/11 17:53:19 [BUGFIXES] * Check that kernel actually supports SO_REUSEPORT before unit-testing it (RT86177) 0.22 BUGFIXES: * Always pass 'socktype' hint to getaddrinfo() in unit tests because some OSes get upset without it * Don't unit-test that sockaddr is updated with a local bind() on SOCK_DGRAM sockets because some OSes don't 0.21 CHANGES: * Provide a downgrade method to turn an AF_INET-domain socket into a real IO::Socket::INET instance * Ensure that IO::Socket->new( Domain => ... ) definitely returns a socket in the right family 0.20 CHANGES: * Skip the IPV6_V6ONLY tests on machines lacking that constant * Avoid Socket::inet_pton() in unit tests as Strawberry lacks it * Added ->join_addr * Respect subclassing argument to ->accept 0.19 CHANGES: * More IO::Socket::INET compatibility fixes: + Ensure ->connected is false after ->close + Ensure that IO::Socket::IP->new(Family => $family) still creates an unbound, unconnected socket filehandle 0.18 CHANGES: * Work around ->socktype being undef on IO::Socket versions before 1.35 by fetching ->sockopt( SO_TYPE ) (RT81549) BUGFIXES: * Fix test skip counts in t/21nonblocking-connect-internet.t (RT79393) 0.17 CHANGES: * Only pass AI_ADDRCONFIG as getaddrinfo() flag if no other flags specified, so the caller can disable it if required. BUGFIXES: * Don't count select() invocations during nonblocking unit test because this is too unreliable and races with the kernel/TCP stack 0.16 BUGFIXES: * Don't ->close after all connect attempts fail, because IO::Socket::INET doesn't do that 0.15 BUGFIXES: * (Hopefully) improved ->connect logic for better MSWin32 support * Skip testing AI_NUMERICSERV on OSes that don't support it 0.14 BUGFIXES: * Second attempt at fixing test skip counts 0.13 BUGFIXES: * Updated test skip counts in unit tests so they match the number of tests actually skipped 0.12 CHANGES: * Ensure that all instances have a defined fileno after construction, even in non-blocking mode (RT77726) 0.11 CHANGES: * Ignore unrecognised constructor arguments rather than complaining about their presence (RT77536) * Call $self->connect during constructor because IO::Socket::SSL relies on this to happen (RT77536) 0.10 CHANGES: * Allow specifying other getaddrinfo flags using GetAddrInfoFlags constructor argument (RT75783) * Provide a convenient hostname+port string splitting utility method 0.09 CHANGES: * Attempt to implement IPV6_V6ONLY sockopt wrapper - not all OSes can disable it, so detect and skip those * Provide ->sockaddr and ->peeraddr convenience accessors, same as IO::Socket::INET (RT75071) * Use new NIx_NOHOST and NIx_NOSERV flags to avoid redundant getnameinfo() lookups when only one of host or service name is required * Ensure that errno gets set to EINVAL on getaddrinfo() failures BUGFIXES: * Ignore existing-but-undefined constructor arguments * Avoid locale-specific error message testing of $! * Updates to unit tests for cygwin 0.08 CHANGES: * Depend on Socket 1.95 now a full dual-life release has been made * Set the AI_ADDRCONFIG getaddrinfo hint * Fix some spelling mistakes/typoes * MSWin32 fixes: + MSWin32 uses select() exceptfds rather than writefds to report on nonblocking connect() failure + MSWin32 uses EWOULDBLOCK rather than EINPROGRESS to indicate nonblocking connect() BUGFIXES: * Ensure ->socket protocol argument is always defined * Bugfix for (e.g.) NetBSD, which gets upset at protocol hint without socktype hint to getaddrinfo() * Pass 'type' rather than 'proto' to constructor in t/11sockopts.t to avoid MSWin32 test failures * Localise $1/$2 to placate [perl #67962] 0.07 CHANGES: * Prepare for Socket::getaddrinfo() in core; prefer it to Socket::GetAddrInfo::getaddrinfo() * Implement Family constructor arg * Optional registration with IO::Socket * Documentation rewordings * Bugfix to local socket connect tests - test using blocking rather than nonblocking sockets to guarantee synchronous packet delivery * Bugfix to t/04, t/05 - skip if unable to bind ::1 0.06 CHANGES: * Implement nonblocking connect * Implement LocalAddrInfo and PeerAddrInfo args * Example of nonblocking usage, using Net::LibAsyncNS 0.05 CHANGES: * Implement combined ->bind and ->connect operations * Accept "host:service" as *Addr args, and PeerAddr as sole constructor argument * Accept "name(port)" as service arguments 0.04 CHANGES: * Try to yield the most appropriate connect/bind/socket error * Implement sockhost/peerhost methods to match ::INET, moved hostname methods to sockhostname/peerhostname BUGFIXES: * Work around IO::Socket bug where ->accept'ed sockets do not get ->sockdomain or ->socktype 0.03 CHANGES: * Set $@ to raise error messages from constructor BUGFIXES: * Correctly implement 'Type' constructor argument * Test SO_BROADCAST on udp instead of tcp as some OSes forbid it 0.02 BUGFIXES: * Not all OSes return true sockopts as 1; test simply for non-zero * Gracefully skip IPv6 tests if Socket6 unavailable 0.01 First version, released on an unsuspecting world.