--- curl-7.12.1/lib/select.c.pollhup 2009-01-11 00:35:32.000000000 +0000 +++ curl-7.12.1/lib/select.c 2009-01-11 00:35:32.000000000 +0000 @@ -73,7 +73,7 @@ ret = 0; num = 0; if (readfd != CURL_SOCKET_BAD) { - if (pfd[num].revents & POLLIN) + if (pfd[num].revents & (POLLIN|POLLHUP)) ret |= CSELECT_IN; if (pfd[num].revents & POLLERR) ret |= CSELECT_ERR; @@ -82,7 +82,7 @@ if (writefd != CURL_SOCKET_BAD) { if (pfd[num].revents & POLLOUT) ret |= CSELECT_OUT; - if (pfd[num].revents & POLLERR) + if (pfd[num].revents & (POLLERR|POLLHUP)) ret |= CSELECT_ERR; } --- curl-7.12.1/lib/transfer.c.pollhup 2009-01-11 00:37:10.000000000 +0000 +++ curl-7.12.1/lib/transfer.c 2009-01-11 00:37:14.000000000 +0000 @@ -223,6 +223,10 @@ fd_write = CURL_SOCKET_BAD; select_res = Curl_select(fd_read, fd_write, 0); + if(select_res == CSELECT_ERR) { + failf(data, "select/poll returned error"); + return CURLE_SEND_ERROR; + } do { /* If we still have reading to do, we check if we have a readable