* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket.c,v 1.5 2001/07/17 20:29:31 gson Exp $ */
+/* $Id: socket.c,v 1.5.2.1 2001/09/17 22:28:57 gson Exp $ */
#define MAKE_EXTERNAL 1
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
#endif
+#include "errno2result.h"
+
#include <errno.h>
#include <stddef.h>
#include <stdlib.h>
* work around it here.
*/
#define SOFT_ERROR(e) ((e) == EAGAIN || \
- (e) == EWOULDBLOCK || \
- (e) == EINTR || \
+ (e) == WSAEWOULDBLOCK || \
+ (e) == WSAEINTR || \
(e) == 0)
#define DLVL(x) ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_SOCKET, ISC_LOG_DEBUG(x)
BytesSent = -1;
/* There is an error... */
Error = WSAGetLastError();
- if (Error == WSAEWOULDBLOCK) {
-
- /*
- * WSAEWOULDBLOCK means we have to wait for an FD_WRITE
- * before we can send.
- */
- errno = EWOULDBLOCK;
- } else if (Error == WSA_IO_PENDING) {
+ if (Error == WSA_IO_PENDING) {
/* Overlapped send successfully initiated. */
errno = EAGAIN;
} else {
ISC_MSG_DOIORECV,
"doio_recv: internal_recvmsg(%d) %d bytes, "
"err %d/%s",
- sock->fd, cc, errno, strerror(errno));
+ sock->fd, cc, errno, NTstrerror(errno));
#define SOFT_OR_HARD(_system, _isc) \
if (errno == _system) { \
return (DOIO_HARD); \
}
- SOFT_OR_HARD(ECONNREFUSED, ISC_R_CONNREFUSED);
- SOFT_OR_HARD(ENETUNREACH, ISC_R_NETUNREACH);
- SOFT_OR_HARD(EHOSTUNREACH, ISC_R_HOSTUNREACH);
- ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
+ SOFT_OR_HARD(WSAECONNREFUSED, ISC_R_CONNREFUSED);
+ SOFT_OR_HARD(WSAENETUNREACH, ISC_R_NETUNREACH);
+ SOFT_OR_HARD(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
+ SOFT_OR_HARD(WSAECONNRESET, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAENETRESET, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAEDISCON, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAENETDOWN, ISC_R_NETDOWN);
+ ALWAYS_HARD(WSAENOBUFS, ISC_R_NORESOURCES);
#undef SOFT_OR_HARD
#undef ALWAYS_HARD
return (DOIO_HARD); \
}
- SOFT_OR_HARD(EACCES, ISC_R_NOPERM);
- SOFT_OR_HARD(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
- SOFT_OR_HARD(ECONNREFUSED, ISC_R_CONNREFUSED);
- ALWAYS_HARD(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
- ALWAYS_HARD(EHOSTUNREACH, ISC_R_HOSTUNREACH);
-#ifdef EHOSTDOWN
- ALWAYS_HARD(EHOSTDOWN, ISC_R_HOSTUNREACH);
-#endif
- ALWAYS_HARD(ENETUNREACH, ISC_R_NETUNREACH);
- ALWAYS_HARD(ENOBUFS, ISC_R_NORESOURCES);
+ SOFT_OR_HARD(WSAEACCES, ISC_R_NOPERM);
+ SOFT_OR_HARD(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
+ SOFT_OR_HARD(WSAECONNREFUSED, ISC_R_CONNREFUSED);
+ SOFT_OR_HARD(WSAECONNRESET, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAENETRESET, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAEDISCON, ISC_R_CONNECTIONRESET);
+ SOFT_OR_HARD(WSAENETDOWN, ISC_R_NETDOWN);
+ ALWAYS_HARD(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
+ ALWAYS_HARD(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
+ ALWAYS_HARD(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
+ ALWAYS_HARD(WSAENETUNREACH, ISC_R_NETUNREACH);
+ ALWAYS_HARD(WSAENOBUFS, ISC_R_NORESOURCES);
ALWAYS_HARD(EPERM, ISC_R_HOSTUNREACH);
ALWAYS_HARD(EPIPE, ISC_R_NOTCONNECTED);
case EPROTONOSUPPORT:
case EPFNOSUPPORT:
case EAFNOSUPPORT:
-#ifdef LINUX
- /*
- * Linux 2.2 (and maybe others) return EINVAL instead of
- * EAFNOSUPPORT.
- */
- case EINVAL:
-#endif
return (ISC_R_FAMILYNOSUPPORT);
default:
switch (errno) {
#define ERROR_MATCH(a, b) case a: dev->result = b; goto err_exit;
- ERROR_MATCH(EACCES, ISC_R_NOPERM);
- ERROR_MATCH(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
- ERROR_MATCH(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
- ERROR_MATCH(ECONNREFUSED, ISC_R_CONNREFUSED);
- ERROR_MATCH(EHOSTUNREACH, ISC_R_HOSTUNREACH);
-#ifdef EHOSTDOWN
- ERROR_MATCH(EHOSTDOWN, ISC_R_HOSTUNREACH);
-#endif
- ERROR_MATCH(ENETUNREACH, ISC_R_NETUNREACH);
- ERROR_MATCH(ENOBUFS, ISC_R_NORESOURCES);
+ ERROR_MATCH(WSAEACCES, ISC_R_NOPERM);
+ ERROR_MATCH(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
+ ERROR_MATCH(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
+ ERROR_MATCH(WSAECONNREFUSED, ISC_R_CONNREFUSED);
+ ERROR_MATCH(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
+ ERROR_MATCH(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
+ ERROR_MATCH(WSAENETUNREACH, ISC_R_NETUNREACH);
+ ERROR_MATCH(WSAENOBUFS, ISC_R_NORESOURCES);
ERROR_MATCH(EPERM, ISC_R_HOSTUNREACH);
ERROR_MATCH(EPIPE, ISC_R_NOTCONNECTED);
#undef ERROR_MATCH
*/
switch (errno) {
#define ERROR_MATCH(a, b) case a: dev->result = b; break;
- ERROR_MATCH(EACCES, ISC_R_NOPERM);
- ERROR_MATCH(EADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
- ERROR_MATCH(EAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
- ERROR_MATCH(ECONNREFUSED, ISC_R_CONNREFUSED);
- ERROR_MATCH(EHOSTUNREACH, ISC_R_HOSTUNREACH);
-#ifdef EHOSTDOWN
- ERROR_MATCH(EHOSTDOWN, ISC_R_HOSTUNREACH);
-#endif
- ERROR_MATCH(ENETUNREACH, ISC_R_NETUNREACH);
- ERROR_MATCH(ENOBUFS, ISC_R_NORESOURCES);
+ ERROR_MATCH(WSAEACCES, ISC_R_NOPERM);
+ ERROR_MATCH(WSAEADDRNOTAVAIL, ISC_R_ADDRNOTAVAIL);
+ ERROR_MATCH(WSAEAFNOSUPPORT, ISC_R_ADDRNOTAVAIL);
+ ERROR_MATCH(WSAECONNREFUSED, ISC_R_CONNREFUSED);
+ ERROR_MATCH(WSAEHOSTUNREACH, ISC_R_HOSTUNREACH);
+ ERROR_MATCH(WSAEHOSTDOWN, ISC_R_HOSTUNREACH);
+ ERROR_MATCH(WSAENETUNREACH, ISC_R_NETUNREACH);
+ ERROR_MATCH(WSAENOBUFS, ISC_R_NORESOURCES);
ERROR_MATCH(EPERM, ISC_R_HOSTUNREACH);
ERROR_MATCH(EPIPE, ISC_R_NOTCONNECTED);
- ERROR_MATCH(ETIMEDOUT, ISC_R_TIMEDOUT);
+ ERROR_MATCH(WSAETIMEDOUT, ISC_R_TIMEDOUT);
#undef ERROR_MATCH
default:
dev->result = ISC_R_UNEXPECTED;