+#ifdef __OS2__
+/*********************************************************************
+ *
+ * Function : os2_socket_strerr
+ *
+ * Description : Translate the return value from sock_errno()
+ * into a string.
+ *
+ * Parameters :
+ * 1 : errcode = The return value from sock_errno().
+ * 2 : tmp_buf = A temporary buffer that might be used to
+ * store the string.
+ *
+ * Returns : String representing the error code. This may be
+ * a global string constant or a string stored in
+ * tmp_buf.
+ *
+ *********************************************************************/
+static char *os2_socket_strerr(int errcode, char *tmp_buf)
+{
+#define TEXT_FOR_ERROR(code,text) \
+ if (errcode == code) \
+ { \
+ return #code " - " text; \
+ }
+
+ TEXT_FOR_ERROR(SOCEPERM , "Not owner.")
+ TEXT_FOR_ERROR(SOCESRCH , "No such process.")
+ TEXT_FOR_ERROR(SOCEINTR , "Interrupted system call.")
+ TEXT_FOR_ERROR(SOCENXIO , "No such device or address.")
+ TEXT_FOR_ERROR(SOCEBADF , "Bad file number.")
+ TEXT_FOR_ERROR(SOCEACCES , "Permission denied.")
+ TEXT_FOR_ERROR(SOCEFAULT , "Bad address.")
+ TEXT_FOR_ERROR(SOCEINVAL , "Invalid argument.")
+ TEXT_FOR_ERROR(SOCEMFILE , "Too many open files.")
+ TEXT_FOR_ERROR(SOCEPIPE , "Broken pipe.")
+ TEXT_FOR_ERROR(SOCEWOULDBLOCK , "Operation would block.")
+ TEXT_FOR_ERROR(SOCEINPROGRESS , "Operation now in progress.")
+ TEXT_FOR_ERROR(SOCEALREADY , "Operation already in progress.")
+ TEXT_FOR_ERROR(SOCENOTSOCK , "Socket operation on non-socket.")
+ TEXT_FOR_ERROR(SOCEDESTADDRREQ , "Destination address required.")
+ TEXT_FOR_ERROR(SOCEMSGSIZE , "Message too long.")
+ TEXT_FOR_ERROR(SOCEPROTOTYPE , "Protocol wrong type for socket.")
+ TEXT_FOR_ERROR(SOCENOPROTOOPT , "Protocol not available.")
+ TEXT_FOR_ERROR(SOCEPROTONOSUPPORT, "Protocol not supported.")
+ TEXT_FOR_ERROR(SOCESOCKTNOSUPPORT, "Socket type not supported.")
+ TEXT_FOR_ERROR(SOCEOPNOTSUPP , "Operation not supported.")
+ TEXT_FOR_ERROR(SOCEPFNOSUPPORT , "Protocol family not supported.")
+ TEXT_FOR_ERROR(SOCEAFNOSUPPORT , "Address family not supported by protocol family.")
+ TEXT_FOR_ERROR(SOCEADDRINUSE , "Address already in use.")
+ TEXT_FOR_ERROR(SOCEADDRNOTAVAIL , "Can't assign requested address.")
+ TEXT_FOR_ERROR(SOCENETDOWN , "Network is down.")
+ TEXT_FOR_ERROR(SOCENETUNREACH , "Network is unreachable.")
+ TEXT_FOR_ERROR(SOCENETRESET , "Network dropped connection on reset.")
+ TEXT_FOR_ERROR(SOCECONNABORTED , "Software caused connection abort.")
+ TEXT_FOR_ERROR(SOCECONNRESET , "Connection reset by peer.")
+ TEXT_FOR_ERROR(SOCENOBUFS , "No buffer space available.")
+ TEXT_FOR_ERROR(SOCEISCONN , "Socket is already connected.")
+ TEXT_FOR_ERROR(SOCENOTCONN , "Socket is not connected.")
+ TEXT_FOR_ERROR(SOCESHUTDOWN , "Can't send after socket shutdown.")
+ TEXT_FOR_ERROR(SOCETOOMANYREFS , "Too many references: can't splice.")
+ TEXT_FOR_ERROR(SOCETIMEDOUT , "Operation timed out.")
+ TEXT_FOR_ERROR(SOCECONNREFUSED , "Connection refused.")
+ TEXT_FOR_ERROR(SOCELOOP , "Too many levels of symbolic links.")
+ TEXT_FOR_ERROR(SOCENAMETOOLONG , "File name too long.")
+ TEXT_FOR_ERROR(SOCEHOSTDOWN , "Host is down.")
+ TEXT_FOR_ERROR(SOCEHOSTUNREACH , "No route to host.")
+ TEXT_FOR_ERROR(SOCENOTEMPTY , "Directory not empty.")
+ TEXT_FOR_ERROR(SOCEOS2ERR , "OS/2 Error.")
+
+ sprintf(tmp_buf, "(error number %d)", errcode);
+ return tmp_buf;
+}
+#endif /* def __OS2__ */
+
+