aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/socket.c
diff options
context:
space:
mode:
authorDmitriy Anisimkov <anisimko@adacore.com>2019-07-04 08:05:13 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-07-04 08:05:13 +0000
commitb7d5159ec9fcc229e47392dc0dfec191d361b398 (patch)
tree1728f625585772a56f8e449aaa314216359cdac1 /gcc/ada/socket.c
parent1708a783b500003d88940ba6ef417efaf045bbc1 (diff)
downloadgcc-b7d5159ec9fcc229e47392dc0dfec191d361b398.zip
gcc-b7d5159ec9fcc229e47392dc0dfec191d361b398.tar.gz
gcc-b7d5159ec9fcc229e47392dc0dfec191d361b398.tar.bz2
[Ada] GNAT.Sockets: fix socket timeout on recent Windows versions
2019-07-04 Dmitriy Anisimkov <anisimko@adacore.com> gcc/ada/ * doc/gnat_ugn/platform_specific_information.rst: Document Windows socket timeout particularity. * gnat_ugn.texi: Regenerate. * gsocket.h: Include versionhelpers.h. * socket.c (__gnat_minus_500ms): New function. * libgnat/g-sothco.ads (Minus_500ms_Windows_Timeout): New imported function. * libgnat/g-socket.adb (Set_Socket_Option): Refactor to remove 500ms from the requested timeout only on old Windows version. From-SVN: r273045
Diffstat (limited to 'gcc/ada/socket.c')
-rw-r--r--gcc/ada/socket.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ada/socket.c b/gcc/ada/socket.c
index a265e01..8fc8415 100644
--- a/gcc/ada/socket.c
+++ b/gcc/ada/socket.c
@@ -803,4 +803,15 @@ const char * __gnat_gai_strerror(int errcode) {
#endif
+int __gnat_minus_500ms() {
+#if defined (_WIN32)
+ // Windows Server 2019 and Windows 8.0 do not need 500 millisecond socket
+ // timeout correction.
+ return !(IsWindows8OrGreater() && !IsWindowsServer()
+ || IsWindowsVersionOrGreater(10, 0, 17763));
+#else
+ return 0;
+#endif
+}
+
#endif /* defined(HAVE_SOCKETS) */