Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd2e59cb

Browse files
committed
Improve TranslateSocketError() to handle more Windows error codes.
The coverage was rather lean for cases that bind() or listen() mightreturn. Add entries for everything that there's a direct equivalentfor in the set of Unix errnos that elog.c has heard of.
1 parent575cbd4 commitd2e59cb

File tree

2 files changed

+58
-13
lines changed

2 files changed

+58
-13
lines changed

‎src/backend/port/win32/socket.c

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,38 @@ intpgwin32_noblock = 0;
4444

4545
/*
4646
* Convert the last socket error code into errno
47+
*
48+
* Note: where there is a direct correspondence between a WSAxxx error code
49+
* and a Berkeley error symbol, this mapping is actually a no-op, because
50+
* in win32.h we redefine the network-related Berkeley error symbols to have
51+
* the values of their WSAxxx counterparts. The point of the switch is
52+
* mostly to translate near-miss error codes into something that's sensible
53+
* in the Berkeley universe.
4754
*/
4855
staticvoid
4956
TranslateSocketError(void)
5057
{
5158
switch (WSAGetLastError())
5259
{
53-
caseWSANOTINITIALISED:
54-
caseWSAENETDOWN:
55-
caseWSAEINPROGRESS:
5660
caseWSAEINVAL:
57-
caseWSAESOCKTNOSUPPORT:
58-
caseWSAEFAULT:
61+
caseWSANOTINITIALISED:
5962
caseWSAEINVALIDPROVIDER:
6063
caseWSAEINVALIDPROCTABLE:
61-
caseWSAEMSGSIZE:
64+
caseWSAEDESTADDRREQ:
6265
errno=EINVAL;
6366
break;
67+
caseWSAEINPROGRESS:
68+
errno=EINPROGRESS;
69+
break;
70+
caseWSAEFAULT:
71+
errno=EFAULT;
72+
break;
73+
caseWSAEISCONN:
74+
errno=EISCONN;
75+
break;
76+
caseWSAEMSGSIZE:
77+
errno=EMSGSIZE;
78+
break;
6479
caseWSAEAFNOSUPPORT:
6580
errno=EAFNOSUPPORT;
6681
break;
@@ -72,16 +87,23 @@ TranslateSocketError(void)
7287
break;
7388
caseWSAEPROTONOSUPPORT:
7489
caseWSAEPROTOTYPE:
90+
caseWSAESOCKTNOSUPPORT:
7591
errno=EPROTONOSUPPORT;
7692
break;
93+
caseWSAECONNABORTED:
94+
errno=ECONNABORTED;
95+
break;
7796
caseWSAECONNREFUSED:
7897
errno=ECONNREFUSED;
7998
break;
99+
caseWSAECONNRESET:
100+
errno=ECONNRESET;
101+
break;
80102
caseWSAEINTR:
81103
errno=EINTR;
82104
break;
83105
caseWSAENOTSOCK:
84-
errno=EBADFD;
106+
errno=ENOTSOCK;
85107
break;
86108
caseWSAEOPNOTSUPP:
87109
errno=EOPNOTSUPP;
@@ -92,13 +114,24 @@ TranslateSocketError(void)
92114
caseWSAEACCES:
93115
errno=EACCES;
94116
break;
95-
caseWSAENOTCONN:
117+
caseWSAEADDRINUSE:
118+
errno=EADDRINUSE;
119+
break;
120+
caseWSAEADDRNOTAVAIL:
121+
errno=EADDRNOTAVAIL;
122+
break;
123+
caseWSAEHOSTUNREACH:
124+
caseWSAEHOSTDOWN:
125+
caseWSAHOST_NOT_FOUND:
126+
caseWSAENETDOWN:
127+
caseWSAENETUNREACH:
96128
caseWSAENETRESET:
97-
caseWSAECONNRESET:
129+
errno=EHOSTUNREACH;
130+
break;
131+
caseWSAENOTCONN:
98132
caseWSAESHUTDOWN:
99-
caseWSAECONNABORTED:
100133
caseWSAEDISCON:
101-
errno=ECONNREFUSED;/*ENOTCONN? */
134+
errno=ENOTCONN;
102135
break;
103136
default:
104137
ereport(NOTICE,

‎src/include/port/win32.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,20 +285,32 @@ typedef int pid_t;
285285
#defineEAFNOSUPPORT WSAEAFNOSUPPORT
286286
#undef EWOULDBLOCK
287287
#defineEWOULDBLOCK WSAEWOULDBLOCK
288+
#undef ECONNABORTED
289+
#defineECONNABORTED WSAECONNABORTED
288290
#undef ECONNRESET
289291
#defineECONNRESET WSAECONNRESET
290292
#undef EINPROGRESS
291293
#defineEINPROGRESS WSAEINPROGRESS
294+
#undef EISCONN
295+
#defineEISCONN WSAEISCONN
292296
#undef ENOBUFS
293297
#defineENOBUFS WSAENOBUFS
294298
#undef EPROTONOSUPPORT
295299
#defineEPROTONOSUPPORT WSAEPROTONOSUPPORT
296300
#undef ECONNREFUSED
297301
#defineECONNREFUSED WSAECONNREFUSED
298-
#undefEBADFD
299-
#defineEBADFD WSAENOTSOCK
302+
#undefENOTSOCK
303+
#defineENOTSOCK WSAENOTSOCK
300304
#undef EOPNOTSUPP
301305
#defineEOPNOTSUPP WSAEOPNOTSUPP
306+
#undef EADDRINUSE
307+
#defineEADDRINUSE WSAEADDRINUSE
308+
#undef EADDRNOTAVAIL
309+
#defineEADDRNOTAVAIL WSAEADDRNOTAVAIL
310+
#undef EHOSTUNREACH
311+
#defineEHOSTUNREACH WSAEHOSTUNREACH
312+
#undef ENOTCONN
313+
#defineENOTCONN WSAENOTCONN
302314

303315
/*
304316
* Extended locale functions with gratuitous underscore prefixes.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp