summaryrefslogtreecommitdiff
path: root/pod
diff options
context:
space:
mode:
authorSteve Hay <steve.m.hay@googlemail.com>2013-09-16 15:40:14 +0100
committerSteve Hay <steve.m.hay@googlemail.com>2013-09-16 15:40:14 +0100
commit820689a12dd90c001eff6a71b9f8205a82275707 (patch)
tree384f17d0a4903b9a821d9fdacad02c567fc21bea /pod
parentea95436966749b18f0eb3ee17b35e67c949931d0 (diff)
downloadperl-820689a12dd90c001eff6a71b9f8205a82275707.tar.gz
perldelta for ea95436966
Diffstat (limited to 'pod')
-rw-r--r--pod/perldelta.pod52
1 files changed, 52 insertions, 0 deletions
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index d553cc6607..36b2508ff8 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -87,6 +87,42 @@ S<C<use locale>>.
Now, the only known place where S<C<use locale>> is not respected is in the
stringification of L<$!|perlvar/$!>.
+=head2 Assignments of Windows sockets error codes to $! now prefer F<errno.h> values over WSAGetLastError() values
+
+In previous versions of Perl, Windows sockets error codes as returned by
+WSAGetLastError() were assigned to $!, and some constants such as ECONNABORTED,
+not in F<errno.h> in VC++ (or the various Windows ports of gcc) were defined to
+corresponding WSAE* values to allow $! to be tested against the E* constants
+exported by L<Errno> and L<POSIX>.
+
+This worked well until VC++ 2010 and later, which introduced new E* constants
+with values E<gt> 100 into F<errno.h>, including some being (re)defined by perl
+to WSAE* values. That caused problems when linking XS code against other
+libraries which used the original definitions of F<errno.h> constants.
+
+To avoid this incompatibility, perl now maps WSAE* error codes to E* values
+where possible, and assigns those values to $!. The E* constants exported by
+L<Errno> and L<POSIX> are updated to match so that testing $! against them,
+wherever previously possible, will continue to work as expected, and all E*
+constants found in F<errno.h> are now exported from those modules with their
+original F<errno.h> values
+
+In order to avoid breakage in existing Perl code which assigns WSAE* values to
+$!, perl now intercepts the assignment and performs the same mapping to E*
+values as it uses internally when assigning to $! itself.
+
+However, one backwards-incompatibility remains: existing Perl code which
+compares $! against the numeric values of the WSAE* error codes that were
+previously assigned to $! will now be broken in those cases where a
+corresponding E* value has been assigned instead. This is only an issue for
+those E* values E<lt> 100, which were always exported from L<Errno> and
+L<POSIX> with their original F<errno.h> values, and therefore could not be used
+for WSAE* error code tests (e.g. WSAEINVAL is 10022, but the corresponding
+EINVAL is 22). (E* values E<gt> 100, if present, were redefined to WSAE*
+values anyway, so compatibility can be achieved by using the E* constants,
+which will work both before and after this change, albeit using different
+numeric values under the hood.)
+
=head1 Deprecations
XXX Any deprecated features, syntax, modules etc. should be listed here.
@@ -277,6 +313,14 @@ than L<base> throughout.
=item *
+L<Errno> has been upgraded from version 1.19 to 1.20.
+
+The list of E* constants exported on Windows has been updated to reflect the
+changes made in the assignment of sockets error codes to $! (see
+L</Incompatible Changes>).
+
+=item *
+
L<Exporter> has been upgraded from version 5.69 to 5.70.
A number of typos have been corrected in the documentation.
@@ -455,6 +499,14 @@ This upgrade is part of a larger change to use L<parent> rather than L<base>.
=item *
+L<POSIX> has been upgraded from version 1.34 to 1.35.
+
+The list of E* constants exported on Windows has been updated to reflect the
+changes made in the assignment of sockets error codes to $! (see
+L</Incompatible Changes>).
+
+=item *
+
L<re> has been upgraded from version 0.25 to 0.26.
This upgrade is part of a larger change to support 64-bit string lengths in the