*** orig/postgresql-8.1.3/src/port/pipe.c Fri Dec 31 21:03:54 2004 --- postgresql-8.1.3/src/port/pipe.c Thu Apr 6 00:03:03 2006 *************** *** 29,35 **** if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to create socket: %ui", WSAGetLastError()))); return -1; } --- 29,35 ---- if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to create socket: %d", WSAGetLastError()))); return -1; } *************** *** 39,76 **** serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if (bind(s, (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to bind: %ui", WSAGetLastError()))); closesocket(s); return -1; } if (listen(s, 1) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to listen: %ui", WSAGetLastError()))); closesocket(s); return -1; } if (getsockname(s, (SOCKADDR *) & serv_addr, &len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to getsockname: %ui", WSAGetLastError()))); closesocket(s); return -1; } if ((handles[1] = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to create socket 2: %ui", WSAGetLastError()))); closesocket(s); return -1; } if (connect(handles[1], (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to connect socket: %ui", WSAGetLastError()))); closesocket(s); return -1; } if ((handles[0] = accept(s, (SOCKADDR *) & serv_addr, &len)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to accept socket: %ui", WSAGetLastError()))); closesocket(handles[1]); handles[1] = INVALID_SOCKET; closesocket(s); --- 39,76 ---- serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if (bind(s, (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to bind: %d", WSAGetLastError()))); closesocket(s); return -1; } if (listen(s, 1) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to listen: %d", WSAGetLastError()))); closesocket(s); return -1; } if (getsockname(s, (SOCKADDR *) & serv_addr, &len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to getsockname: %d", WSAGetLastError()))); closesocket(s); return -1; } if ((handles[1] = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to create socket 2: %d", WSAGetLastError()))); closesocket(s); return -1; } if (connect(handles[1], (SOCKADDR *) & serv_addr, len) == SOCKET_ERROR) { ! ereport(LOG, (errmsg_internal("pgpipe failed to connect socket: %d", WSAGetLastError()))); closesocket(s); return -1; } if ((handles[0] = accept(s, (SOCKADDR *) & serv_addr, &len)) == INVALID_SOCKET) { ! ereport(LOG, (errmsg_internal("pgpipe failed to accept socket: %d", WSAGetLastError()))); closesocket(handles[1]); handles[1] = INVALID_SOCKET; closesocket(s); *************** *** 84,94 **** int piperead(int s, char *buf, int len) { ! int ret = recv(s, buf, len, 0); ! if (ret < 0 && WSAGetLastError() == WSAECONNRESET) ! /* EOF on the pipe! (win32 socket based implementation) */ ret = 0; return ret; } --- 84,110 ---- int piperead(int s, char *buf, int len) { ! int ret = 0; ! int error = 0; ! while (true) ! { ! ret = recv(s, buf, len, 0); ! if (ret == SOCKET_ERROR) ! { ! error = WSAGetLastError(); ! if (error == WSAEWOULDBLOCK) ! continue; ! } ! break; ! } ! ! if (ret == SOCKET_ERROR && error == WSAECONNRESET) ret = 0; + + if (ret == SOCKET_ERROR) + ereport(LOG, (errmsg_internal("socket error on pipe: %d", error))); + return ret; }