diff -cr postgresql-newsignal/src/backend/port/win32/socket.c postgresql-errcodefix/src/backend/port/win32/socket.c
*** postgresql-newsignal/src/backend/port/win32/socket.c	Mon Apr 19 21:49:34 2004
--- postgresql-errcodefix/src/backend/port/win32/socket.c	Mon Apr 19 21:33:16 2004
***************
*** 431,433 ****
--- 431,466 ----
  		memcpy(writefds, &outwritefds, sizeof(fd_set));
  	return nummatches;
  }
+ 
+ 
+ 
+ /* 
+  * Return win32 error string, since strerror can't
+  * handle winsock codes 
+  */
+ static char wserrbuf[256];
+ const char *
+ pgwin32_socket_strerror(int err)
+ {
+ 	static HANDLE handleDLL = INVALID_HANDLE_VALUE;
+ 
+ 	if (handleDLL == INVALID_HANDLE_VALUE) {
+ 		handleDLL = LoadLibraryEx("netmsg.dll", NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE);
+ 		if (handleDLL ==  NULL)
+ 			ereport(FATAL,
+ 					(errmsg_internal("Failed to load netmsg.dll: %i",(int)GetLastError())));
+ 	}
+ 
+ 	ZeroMemory(&wserrbuf, sizeof(wserrbuf));
+ 	if (FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_FROM_HMODULE,
+ 					  handleDLL,
+ 					  err,
+ 					  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ 					  wserrbuf,
+ 					  sizeof(wserrbuf)-1,
+ 					  NULL) == 0) {
+ 		/* Failed to get id */
+ 		sprintf(wserrbuf,"Unknown winsock error %i",err);
+ 	}
+ 	return wserrbuf;
+ }
diff -cr postgresql-newsignal/src/backend/utils/error/elog.c postgresql-errcodefix/src/backend/utils/error/elog.c
*** postgresql-newsignal/src/backend/utils/error/elog.c	Mon Apr 19 21:49:12 2004
--- postgresql-errcodefix/src/backend/utils/error/elog.c	Mon Apr 19 21:19:50 2004
***************
*** 1604,1609 ****
--- 1604,1614 ----
  	static char errorstr_buf[48];
  	const char *str;
  
+ #ifdef WIN32
+ 	/* Winsock error code range, per WinError.h */
+ 	if (errnum >= 10000 && errnum <= 11999)
+ 		return pgwin32_socket_strerror(errnum);
+ #endif
  	str = strerror(errnum);
  
  	/*
diff -cr postgresql-newsignal/src/include/port/win32.h postgresql-errcodefix/src/include/port/win32.h
*** postgresql-newsignal/src/include/port/win32.h	Mon Apr 19 21:50:24 2004
--- postgresql-errcodefix/src/include/port/win32.h	Mon Apr 19 21:34:15 2004
***************
*** 138,143 ****
--- 138,145 ----
  int pgwin32_select(int nfds, fd_set* readfs, fd_set* writefds, fd_set* exceptfds, const struct timeval* timeout);
  int pgwin32_recv(SOCKET s, char* buf, int len, int flags);
  int pgwin32_send(SOCKET s, char* buf, int len, int flags);
+ 
+ const char *pgwin32_socket_strerror(int err);
  #endif
  
  
