aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--socket/Makefile9
-rw-r--r--socket/sys/socket.h15
-rw-r--r--socket/tst-sockopt-time64.c1
-rw-r--r--socket/tst-sockopt.c52
-rw-r--r--sysdeps/unix/sysv/linux/Versions1
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/csky/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/getsockopt.c3
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/i386/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libc.abilist1
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist1
25 files changed, 99 insertions, 1 deletions
diff --git a/socket/Makefile b/socket/Makefile
index 27ffe44..3759576 100644
--- a/socket/Makefile
+++ b/socket/Makefile
@@ -31,7 +31,14 @@ routines := accept bind connect getpeername getsockname getsockopt \
setsockopt shutdown socket socketpair isfdtype opensock \
sockatmark accept4 recvmmsg sendmmsg
-tests := tst-accept4
+tests := \
+ tst-accept4 \
+ tst-sockopt \
+ # tests
+
+tests-time64 := \
+ tst-sockopt-time64 \
+ # tests
aux := sa_len
diff --git a/socket/sys/socket.h b/socket/sys/socket.h
index e779dc8..b37c87e 100644
--- a/socket/sys/socket.h
+++ b/socket/sys/socket.h
@@ -251,9 +251,24 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
actual length. Returns 0 on success, -1 for errors. */
+#ifndef __USE_TIME_BITS64
extern int getsockopt (int __fd, int __level, int __optname,
void *__restrict __optval,
socklen_t *__restrict __optlen) __THROW;
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT_NTH (getsockopt,
+ (int __fd, int __level, int __optname,
+ void *__restrict __optval,
+ socklen_t *__restrict __optlen),
+ __getsockopt64);
+# else
+extern int __getsockopt64 (int __fd, int __level, int __optname,
+ void *__restrict __optval,
+ socklen_t *__restrict __optlen) __THROW;
+# define getsockopt __getsockopt64
+# endif
+#endif
/* Set socket FD's option OPTNAME at protocol level LEVEL
to *OPTVAL (which is OPTLEN bytes long).
diff --git a/socket/tst-sockopt-time64.c b/socket/tst-sockopt-time64.c
new file mode 100644
index 0000000..f1df48d
--- /dev/null
+++ b/socket/tst-sockopt-time64.c
@@ -0,0 +1 @@
+#include "tst-sockopt.c"
diff --git a/socket/tst-sockopt.c b/socket/tst-sockopt.c
new file mode 100644
index 0000000..f3ce0bc
--- /dev/null
+++ b/socket/tst-sockopt.c
@@ -0,0 +1,52 @@
+/* Smoke test for socket options.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <support/xsocket.h>
+#include <support/xunistd.h>
+#include <support/check.h>
+#include <netinet/in.h>
+
+static int
+do_test (void)
+{
+ int fd = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+ struct linger value = { -1, -1 };
+ socklen_t optlen = sizeof (value);
+ TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+ TEST_COMPARE (optlen, sizeof (value));
+ TEST_COMPARE (value.l_onoff, 0);
+ TEST_COMPARE (value.l_linger, 0);
+
+ value.l_onoff = 1;
+ value.l_linger = 30;
+ TEST_COMPARE (setsockopt (fd, SOL_SOCKET, SO_LINGER, &value, sizeof (value)),
+ 0);
+
+ value.l_onoff = -1;
+ value.l_linger = -1;
+ TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+ TEST_COMPARE (optlen, sizeof (value));
+ TEST_COMPARE (value.l_onoff, 1);
+ TEST_COMPARE (value.l_linger, 30);
+
+ xclose (fd);
+ return 0;
+}
+
+#include <support/test-driver.c>
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index e03ebf9..5ff450f 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -225,6 +225,7 @@ libc {
__gai_suspend_time64;
__getitimer64;
__getrusage64;
+ __getsockopt64;
__gettimeofday64;
__glob64_time64;
__globfree64_time64;
diff --git a/sysdeps/unix/sysv/linux/arm/be/libc.abilist b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
index a542ad2..e03e92b 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libc.abilist
@@ -218,6 +218,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libc.abilist b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
index ea22919..9ec8cc8 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libc.abilist
@@ -215,6 +215,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/csky/libc.abilist b/sysdeps/unix/sysv/linux/csky/libc.abilist
index da3f538..e90ad23 100644
--- a/sysdeps/unix/sysv/linux/csky/libc.abilist
+++ b/sysdeps/unix/sysv/linux/csky/libc.abilist
@@ -2374,6 +2374,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/getsockopt.c b/sysdeps/unix/sysv/linux/getsockopt.c
index f86b06d..57343d4 100644
--- a/sysdeps/unix/sysv/linux/getsockopt.c
+++ b/sysdeps/unix/sysv/linux/getsockopt.c
@@ -101,3 +101,6 @@ __getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
return r;
}
weak_alias (__getsockopt, getsockopt)
+#if __TIMESIZE != 64
+weak_alias (__getsockopt, __getsockopt64)
+#endif
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 91922bd..0d6e590 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -2323,6 +2323,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 9e4937c..368d23c 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2506,6 +2506,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index af2e09d..546f677 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -219,6 +219,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 6f416da..0ae3ce4 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2450,6 +2450,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
index 3accefd..8a6be1f 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
@@ -2423,6 +2423,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
index d21f917..a53147b 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
@@ -2420,6 +2420,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index 2ff1582..c5c6f29 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2415,6 +2415,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
index b58f607..0268a4e 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
@@ -2413,6 +2413,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index ae93342..19fa4ba 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2421,6 +2421,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/nios2/libc.abilist b/sysdeps/unix/sysv/linux/nios2/libc.abilist
index 91c103f..f40f94f 100644
--- a/sysdeps/unix/sysv/linux/nios2/libc.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libc.abilist
@@ -2462,6 +2462,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 7961a99..374685c 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2477,6 +2477,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index 146e27a..3a1c270 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2510,6 +2510,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index 35c59b5..cd0dc21 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2475,6 +2475,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libc.abilist b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
index 9e2c2fb..69dde25 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libc.abilist
@@ -2330,6 +2330,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libc.abilist b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
index f2dd40b..0b315be 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libc.abilist
@@ -2327,6 +2327,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 567a7d8..c74bc8b 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2470,6 +2470,7 @@ GLIBC_2.34 __futimesat64 F
GLIBC_2.34 __gai_suspend_time64 F
GLIBC_2.34 __getitimer64 F
GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
GLIBC_2.34 __gettimeofday64 F
GLIBC_2.34 __glob64_time64 F
GLIBC_2.34 __globfree64_time64 F