diff --git a/src/os/win32/ngx_errno.c b/src/os/win32/ngx_errno.c
index d0cff7b..30c1b93 100644
--- a/src/os/win32/ngx_errno.c
+++ b/src/os/win32/ngx_errno.c
@@ -9,9 +9,29 @@
 #include <ngx_core.h>
 
 
+ngx_str_t wsa_errors[] = {
+    ngx_string("Invalid argument"),                          /* 10022 */
+    ngx_null_string,                                         /* 10023 */
+    ngx_null_string,                                         /* 10024 */
+    ngx_null_string,                                         /* 10025 */
+    ngx_null_string,                                         /* 10026 */
+    ngx_null_string,                                         /* 10027 */
+    ngx_null_string,                                         /* 10028 */
+    ngx_null_string,                                         /* 10029 */
+    ngx_null_string,                                         /* 10030 */
+    ngx_null_string,                                         /* 10031 */
+    ngx_null_string,                                         /* 10032 */
+    ngx_null_string,                                         /* 10033 */
+    ngx_null_string,                                         /* 10034 */
+    ngx_string("Resource temporarily unavailable")           /* 10035 */
+};
+
+
 int ngx_strerror_r(ngx_err_t err, char *errstr, size_t size)
 {
-    int len;
+    int        n;
+    u_int      len;
+    ngx_err_t  format_error;
 
     len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
                         | FORMAT_MESSAGE_IGNORE_INSERTS,
@@ -19,12 +39,28 @@
                         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                         errstr, size, NULL);
 
-    /* add WSA error messages */
-
     if (len == 0) {
+        format_error = GetLastError();
+
+        if (format_error == ERROR_MR_MID_NOT_FOUND) {
+            n = err - WSABASEERR - 22;
+
+            if (n >= 0 && n < 14) {
+                len = wsa_errors[n].len;
+
+                if (len) {
+                    if (len > size) {
+                        len = size;
+                    }
+
+                    ngx_memcpy(errstr, wsa_errors[n].data, len);
+                    return len;
+                }
+            }
+        }
 
         len = ngx_snprintf(errstr, size,
-                           "FormatMessage error:(%d)", GetLastError());
+                           "FormatMessage() error:(%d)", format_error);
         return len;
 
     }
