mirror of
https://github.com/shadowsocks/shadowsocks-libev.git
synced 2026-10-21 14:33:55 +00:00
fix #181
This commit is contained in:
+11
-4
@@ -59,7 +59,7 @@ void free_addr(ss_addr_t *addr)
|
||||
|
||||
void parse_addr(const char *str, ss_addr_t *addr)
|
||||
{
|
||||
int ret = -1, n = 0;
|
||||
int ipv6 = 0, ret = -1, n = 0;
|
||||
char *pch;
|
||||
pch = strchr(str, ':');
|
||||
while (pch != NULL) {
|
||||
@@ -68,15 +68,22 @@ void parse_addr(const char *str, ss_addr_t *addr)
|
||||
pch = strchr(pch + 1, ':');
|
||||
}
|
||||
if (n > 1) {
|
||||
if (strcmp(str + ret, "]") != 0) {
|
||||
ipv6 = 1;
|
||||
if (str[ret - 1] != ']') {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
if (ret == -1) {
|
||||
addr->host = strdup(str);
|
||||
if (ipv6)
|
||||
addr->host = ss_strndup(str + 1, strlen(str) - 2);
|
||||
else
|
||||
addr->host = strdup(str);
|
||||
addr->port = NULL;
|
||||
} else {
|
||||
addr->host = ss_strndup(str, ret);
|
||||
if (ipv6)
|
||||
addr->host = ss_strndup(str + 1, ret - 2);
|
||||
else
|
||||
addr->host = ss_strndup(str, ret);
|
||||
addr->port = strdup(str + ret + 1);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -421,7 +421,7 @@ static void query_resolve_cb(EV_P_ ev_io *w, int revents)
|
||||
err = asyncns_getaddrinfo_done(asyncns, query, &result);
|
||||
|
||||
if (err) {
|
||||
ERROR("[udp] getaddrinfo");
|
||||
ERROR("[udp] asysncns_getaddrinfo");
|
||||
} else {
|
||||
// Use IPV4 address if possible
|
||||
for (rp = result; rp != NULL; rp = rp->ai_next) {
|
||||
@@ -819,7 +819,7 @@ static void server_recv_cb(EV_P_ ev_io *w, int revents)
|
||||
asyncns_query_t *query;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_socktype = SOCK_DGRAM;
|
||||
|
||||
query = asyncns_getaddrinfo(server_ctx->asyncns,
|
||||
host, port, &hints);
|
||||
|
||||
Reference in New Issue
Block a user