Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ngx_errno.c « win32 « os « src - github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 268ed52611570725dd54e05fa8f4ef3a707989b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143

/*
 * Copyright (C) Igor Sysoev
 */


/*
 * TODO:
 *   add WSA error messages for NT and 98
 *   test for English only messages
 */

#include <ngx_config.h>
#include <ngx_core.h>


static ngx_str_t  wsa_errors[] = {
    ngx_string("An invalid argument was supplied"),      /* WSAEINVAL 10022 */
    ngx_string("Too many open sockets"),                 /* WSAEMFILE 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 */

    /* WSAEWOULDBLOCK 10035 */
    ngx_string("A non-blocking socket operation could not be completed "
               "immediately"),

    ngx_null_string,                                               /* 10036 */
    ngx_null_string,                                               /* 10037 */

    /* WSAENOTSOCK 10038 */
    ngx_string("An operation was attempted on something that is not a socket"),

    ngx_null_string,                                               /* 10039 */
    ngx_null_string,                                               /* 10040 */
    ngx_null_string,                                               /* 10041 */

    /* WSAENOPROTOOPT 10042 */
    ngx_string("An unknown, invalid, or unsupported option or level was "
               "specified in a getsockopt or setsockopt call"),

    ngx_null_string,                                               /* 10043 */
    ngx_null_string,                                               /* 10044 */
    ngx_null_string,                                               /* 10045 */
    ngx_null_string,                                               /* 10046 */
    ngx_null_string,                                               /* 10047 */
    ngx_null_string,                                               /* 10048 */
    ngx_null_string,                                               /* 10049 */
    ngx_null_string,                                               /* 10050 */
    ngx_null_string,                                               /* 10051 */
    ngx_null_string,                                               /* 10052 */
    ngx_null_string,                                               /* 10053 */

    /* WSAECONNRESET 10054 */
    ngx_string("An existing connection was forcibly closed by the remote host"),

    /* WSAENOBUFS 10055 */
    ngx_string("An operation on a socket could not be performed because "
               "the system lacked sufficient buffer space or "
               "because a queue was full"),

    /* WSAEISCONN 10056 */
    ngx_string("A connect request was made on an already connected socket"),

    /* WSAENOTCONN 10057 */
    ngx_string("A request to send or receive data was disallowed because"
               "the socket is not connected and (when sending on a datagram "
               "socket using a sendto call) no address was supplied"),

    ngx_null_string,                                               /* 10058 */
    ngx_null_string,                                               /* 10059 */

    /* WSAETIMEDOUT 10060 */
    ngx_string("A connection attempt failed because the connected party "
               "did not properly respond after a period of time, "
               "or established connection failed because connected host "
               "has failed to respond"),

    /* WSAECONNREFUSED 10061 */
    ngx_string("No connection could be made because the target machine "
               "actively refused it")
};


u_char *ngx_strerror_r(ngx_err_t err, u_char *errstr, size_t size)
{
    int        n;
    u_int      len;
    ngx_err_t  format_error;

    if (size == 0) {
        return errstr;
    }

    len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
                        |FORMAT_MESSAGE_IGNORE_INSERTS,
                        NULL, err,
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                        (char *) errstr, size, NULL);

    if (len == 0) {
        format_error = GetLastError();

        if (format_error == ERROR_MR_MID_NOT_FOUND) {
            n = err - WSAEINVAL;

            if (n >= 0 && n <= WSAECONNREFUSED - WSAEINVAL) {
                len = wsa_errors[n].len;

                if (len) {
                    if (len > size) {
                        len = size;
                    }

                    ngx_memcpy(errstr, wsa_errors[n].data, len);

                    return errstr + len;
                }
            }
        }

        return ngx_snprintf(errstr, size,
                            "FormatMessage() error:(%d)", format_error);
    }

    /* remove ".\r\n\0" */
    while (errstr[len] == '\0' || errstr[len] == CR
           || errstr[len] == LF || errstr[len] == '.')
    {
        --len;
    }

    return &errstr[++len];
}