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

Commitb00d50d

Browse files
committed
Per discussion earlier today, here is a fix that lets ereport() on win32
report socket errors.Magnus Hagander
1 parenta4d9d3e commitb00d50d

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

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

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
77
*
88
* IDENTIFICATION
9-
* $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.1 2004/04/12 16:19:18 momjian Exp $
9+
* $PostgreSQL: pgsql/src/backend/port/win32/socket.c,v 1.2 2004/04/22 03:50:54 momjian Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -432,3 +432,35 @@ int pgwin32_select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfd
432432
returnnummatches;
433433
}
434434

435+
436+
/*
437+
* Return win32 error string, since strerror can't
438+
* handle winsock codes
439+
*/
440+
staticcharwserrbuf[256];
441+
constchar*
442+
pgwin32_socket_strerror(interr)
443+
{
444+
staticHANDLEhandleDLL=INVALID_HANDLE_VALUE;
445+
446+
if (handleDLL==INVALID_HANDLE_VALUE) {
447+
handleDLL=LoadLibraryEx("netmsg.dll",NULL,DONT_RESOLVE_DLL_REFERENCES |LOAD_LIBRARY_AS_DATAFILE);
448+
if (handleDLL==NULL)
449+
ereport(FATAL,
450+
(errmsg_internal("Failed to load netmsg.dll: %i",(int)GetLastError())));
451+
}
452+
453+
ZeroMemory(&wserrbuf,sizeof(wserrbuf));
454+
if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_FROM_HMODULE,
455+
handleDLL,
456+
err,
457+
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
458+
wserrbuf,
459+
sizeof(wserrbuf)-1,
460+
NULL)==0) {
461+
/* Failed to get id */
462+
sprintf(wserrbuf,"Unknown winsock error %i",err);
463+
}
464+
returnwserrbuf;
465+
}
466+

‎src/backend/utils/error/elog.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
*
3838
*
3939
* IDENTIFICATION
40-
* $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.134 2004/04/16 12:59:05 momjian Exp $
40+
* $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.135 2004/04/22 03:51:09 momjian Exp $
4141
*
4242
*-------------------------------------------------------------------------
4343
*/
@@ -1661,6 +1661,11 @@ useful_strerror(int errnum)
16611661
staticcharerrorstr_buf[48];
16621662
constchar*str;
16631663

1664+
#ifdefWIN32
1665+
/* Winsock error code range, per WinError.h */
1666+
if (errnum >=10000&&errnum <=11999)
1667+
returnpgwin32_socket_strerror(errnum);
1668+
#endif
16641669
str=strerror(errnum);
16651670

16661671
/*

‎src/include/port/win32.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.22 2004/04/19 17:42:59 momjian Exp $ */
1+
/* $PostgreSQL: pgsql/src/include/port/win32.h,v 1.23 2004/04/22 03:51:24 momjian Exp $ */
22

33
/* undefine and redefine after #include */
44
#undef mkdir
@@ -139,6 +139,8 @@ int pgwin32_connect(SOCKET s, const struct sockaddr* name, int namelen);
139139
intpgwin32_select(intnfds,fd_set*readfs,fd_set*writefds,fd_set*exceptfds,conststructtimeval*timeout);
140140
intpgwin32_recv(SOCKETs,char*buf,intlen,intflags);
141141
intpgwin32_send(SOCKETs,char*buf,intlen,intflags);
142+
143+
constchar*pgwin32_socket_strerror(interr);
142144
#endif
143145

144146

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp