Commit d4f6a210 authored by Bruno Haible's avatar Bruno Haible

Fix malfunction of socket functions on HP-UX in 64-bit mode.

* m4/socketlib.m4 (gl_SOCKETLIB): Add comment.
* m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define
_HPUX_ALT_XOPEN_SOCKET_API.
* modules/accept (Depends-on): Add 'extensions'.
* modules/getpeername (Depends-on): Likewise.
* modules/getsockname (Depends-on): Likewise.
* modules/getsockopt (Depends-on): Likewise.
* modules/recvfrom (Depends-on): Likewise.
* doc/posix-functions/accept.texi: Mention the HP-UX socklen_t problem.
* doc/posix-functions/getpeername.texi: Likewise.
* doc/posix-functions/getsockname.texi: Likewise.
* doc/posix-functions/getsockopt.texi: Likewise.
* doc/posix-functions/recvfrom.texi: Likewise.
parent 46e7ff4a
2018-01-27 Bruno Haible <bruno@clisp.org>
Fix malfunction of socket functions on HP-UX in 64-bit mode.
* m4/socketlib.m4 (gl_SOCKETLIB): Add comment.
* m4/extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Define
_HPUX_ALT_XOPEN_SOCKET_API.
* modules/accept (Depends-on): Add 'extensions'.
* modules/getpeername (Depends-on): Likewise.
* modules/getsockname (Depends-on): Likewise.
* modules/getsockopt (Depends-on): Likewise.
* modules/recvfrom (Depends-on): Likewise.
* doc/posix-functions/accept.texi: Mention the HP-UX socklen_t problem.
* doc/posix-functions/getpeername.texi: Likewise.
* doc/posix-functions/getsockname.texi: Likewise.
* doc/posix-functions/getsockopt.texi: Likewise.
* doc/posix-functions/recvfrom.texi: Likewise.
2018-01-27 Bruno Haible <bruno@clisp.org>
getsockname tests: More tests.
......@@ -17,6 +17,11 @@ the @code{accept} function cannot be used in calls to @code{read},
On Windows platforms (excluding Cygwin), error codes from this function
are not placed in @code{errno}, and @code{WSAGetLastError} must be used
instead.
@item
On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API}
is not defined, this function behaves incorrectly because it is declared
to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact
considers it as a pointer to a 32-bit wide @code{unsigned int} entity.
@end itemize
Portability problems not fixed by Gnulib:
......
......@@ -12,6 +12,11 @@ Portability problems fixed by Gnulib:
On Windows platforms (excluding Cygwin), error codes from this function
are not placed in @code{errno}, and @code{WSAGetLastError} must be used
instead.
@item
On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API}
is not defined, this function behaves incorrectly because it is declared
to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact
considers it as a pointer to a 32-bit wide @code{unsigned int} entity.
@end itemize
Portability problems not fixed by Gnulib:
......
......@@ -12,6 +12,11 @@ Portability problems fixed by Gnulib:
On Windows platforms (excluding Cygwin), error codes from this function
are not placed in @code{errno}, and @code{WSAGetLastError} must be used
instead.
@item
On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API}
is not defined, this function behaves incorrectly because it is declared
to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact
considers it as a pointer to a 32-bit wide @code{unsigned int} entity.
@end itemize
Portability problems not fixed by Gnulib:
......
......@@ -12,6 +12,11 @@ Portability problems fixed by Gnulib:
On Windows platforms (excluding Cygwin), error codes from this function
are not placed in @code{errno}, and @code{WSAGetLastError} must be used
instead.
@item
On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API}
is not defined, this function behaves incorrectly because it is declared
to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact
considers it as a pointer to a 32-bit wide @code{unsigned int} entity.
@end itemize
Portability problems not fixed by Gnulib:
......
......@@ -16,6 +16,11 @@ OSF/1 5.1.
On Windows platforms (excluding Cygwin), error codes from this function
are not placed in @code{errno}, and @code{WSAGetLastError} must be used
instead.
@item
On HP-UX 11, in 64-bit mode, when the macro @code{_HPUX_ALT_XOPEN_SOCKET_API}
is not defined, this function behaves incorrectly because it is declared
to take a pointer to a 64-bit wide @code{socklen_t} entity but in fact
considers it as a pointer to a 32-bit wide @code{unsigned int} entity.
@end itemize
Portability problems not fixed by Gnulib:
......
# serial 17 -*- Autoconf -*-
# serial 18 -*- Autoconf -*-
# Enable extensions on systems that normally disable them.
# Copyright (C) 2003, 2006-2018 Free Software Foundation, Inc.
......@@ -118,6 +118,11 @@ dnl configure.ac when using autoheader 2.62.
#ifndef _XOPEN_SOURCE
# undef _XOPEN_SOURCE
#endif
/* Enable X/Open compliant socket functions that do not require linking
with -lxnet on HP-UX 11.11. */
#ifndef _HPUX_ALT_XOPEN_SOCKET_API
# undef _HPUX_ALT_XOPEN_SOCKET_API
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
......@@ -163,6 +168,7 @@ dnl configure.ac when using autoheader 2.62.
[ac_cv_should_define__xopen_source=yes])])])
test $ac_cv_should_define__xopen_source = yes &&
AC_DEFINE([_XOPEN_SOURCE], [500])
AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API])
])# AC_USE_SYSTEM_EXTENSIONS
# gl_USE_SYSTEM_EXTENSIONS
......
# socketlib.m4 serial 1
# socketlib.m4 serial 2
dnl Copyright (C) 2008-2018 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
......@@ -38,6 +38,10 @@ AC_DEFUN([gl_SOCKETLIB],
dnl Solaris has most socket functions in libsocket.
dnl Haiku has most socket functions in libnetwork.
dnl BeOS has most socket functions in libnet.
dnl On HP-UX, do NOT link with libxnet, because in 64-bit mode this would
dnl break code (e.g. in libraries) that invokes accept(), getpeername(),
dnl getsockname(), getsockopt(), or recvfrom() with a 32-bit addrlen. See
dnl "man xopen_networking" for details.
AC_CACHE_CHECK([for library containing setsockopt], [gl_cv_lib_socket], [
gl_cv_lib_socket=
AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern
......
......@@ -6,6 +6,7 @@ lib/accept.c
lib/w32sock.h
Depends-on:
extensions
sys_socket
socketlib
errno [test "$ac_cv_header_winsock2_h" = yes]
......
......@@ -7,6 +7,7 @@ lib/getpeername.c
lib/w32sock.h
Depends-on:
extensions
sys_socket
socketlib
errno [test "$ac_cv_header_winsock2_h" = yes]
......
......@@ -7,6 +7,7 @@ lib/getsockname.c
lib/w32sock.h
Depends-on:
extensions
sys_socket
socketlib
errno [test "$ac_cv_header_winsock2_h" = yes]
......
......@@ -6,6 +6,7 @@ lib/getsockopt.c
lib/w32sock.h
Depends-on:
extensions
sys_socket
socketlib
sys_time [test "$ac_cv_header_winsock2_h" = yes]
......
......@@ -6,6 +6,7 @@ lib/recvfrom.c
lib/w32sock.h
Depends-on:
extensions
sys_socket
socketlib
errno [test "$ac_cv_header_winsock2_h" = yes]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment