gnulib: import select
[deliverable/binutils-gdb.git] / gnulib / import / w32sock.h
CommitLineData
d20bc122
MF
1/* w32sock.h --- internal auxiliary functions for Windows socket functions
2
3 Copyright (C) 2008-2021 Free Software Foundation, Inc.
4
5 This program is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <https://www.gnu.org/licenses/>. */
17
18/* Written by Paolo Bonzini */
19
20#include <errno.h>
21
22/* Get O_RDWR and O_BINARY. */
23#include <fcntl.h>
24
25/* Get _open_osfhandle(). */
26#include <io.h>
27
28/* Get _get_osfhandle(). */
29#if GNULIB_MSVC_NOTHROW
30# include "msvc-nothrow.h"
31#else
32# include <io.h>
33#endif
34
35#define FD_TO_SOCKET(fd) ((SOCKET) _get_osfhandle ((fd)))
36#define SOCKET_TO_FD(fh) (_open_osfhandle ((intptr_t) (fh), O_RDWR | O_BINARY))
37
38static inline void
39set_winsock_errno (void)
40{
41 int err = WSAGetLastError ();
42
43 /* Map some WSAE* errors to the runtime library's error codes. */
44 switch (err)
45 {
46 case WSA_INVALID_HANDLE:
47 errno = EBADF;
48 break;
49 case WSA_NOT_ENOUGH_MEMORY:
50 errno = ENOMEM;
51 break;
52 case WSA_INVALID_PARAMETER:
53 errno = EINVAL;
54 break;
55 case WSAENAMETOOLONG:
56 errno = ENAMETOOLONG;
57 break;
58 case WSAENOTEMPTY:
59 errno = ENOTEMPTY;
60 break;
61 case WSAEWOULDBLOCK:
62 errno = EWOULDBLOCK;
63 break;
64 case WSAEINPROGRESS:
65 errno = EINPROGRESS;
66 break;
67 case WSAEALREADY:
68 errno = EALREADY;
69 break;
70 case WSAENOTSOCK:
71 errno = ENOTSOCK;
72 break;
73 case WSAEDESTADDRREQ:
74 errno = EDESTADDRREQ;
75 break;
76 case WSAEMSGSIZE:
77 errno = EMSGSIZE;
78 break;
79 case WSAEPROTOTYPE:
80 errno = EPROTOTYPE;
81 break;
82 case WSAENOPROTOOPT:
83 errno = ENOPROTOOPT;
84 break;
85 case WSAEPROTONOSUPPORT:
86 errno = EPROTONOSUPPORT;
87 break;
88 case WSAEOPNOTSUPP:
89 errno = EOPNOTSUPP;
90 break;
91 case WSAEAFNOSUPPORT:
92 errno = EAFNOSUPPORT;
93 break;
94 case WSAEADDRINUSE:
95 errno = EADDRINUSE;
96 break;
97 case WSAEADDRNOTAVAIL:
98 errno = EADDRNOTAVAIL;
99 break;
100 case WSAENETDOWN:
101 errno = ENETDOWN;
102 break;
103 case WSAENETUNREACH:
104 errno = ENETUNREACH;
105 break;
106 case WSAENETRESET:
107 errno = ENETRESET;
108 break;
109 case WSAECONNABORTED:
110 errno = ECONNABORTED;
111 break;
112 case WSAECONNRESET:
113 errno = ECONNRESET;
114 break;
115 case WSAENOBUFS:
116 errno = ENOBUFS;
117 break;
118 case WSAEISCONN:
119 errno = EISCONN;
120 break;
121 case WSAENOTCONN:
122 errno = ENOTCONN;
123 break;
124 case WSAETIMEDOUT:
125 errno = ETIMEDOUT;
126 break;
127 case WSAECONNREFUSED:
128 errno = ECONNREFUSED;
129 break;
130 case WSAELOOP:
131 errno = ELOOP;
132 break;
133 case WSAEHOSTUNREACH:
134 errno = EHOSTUNREACH;
135 break;
136 default:
137 errno = (err > 10000 && err < 10025) ? err - 10000 : err;
138 break;
139 }
140}
This page took 0.026454 seconds and 4 git commands to generate.