/*
+--------------------------------------------------------------------+
- | libmemcached - C/C++ Client Library for memcached |
+ | libmemcached-awesome - C/C++ Client Library for memcached |
+--------------------------------------------------------------------+
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted under the terms of the BSD license. |
| the terms online at: https://opensource.org/licenses/BSD-3-Clause |
+--------------------------------------------------------------------+
| Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ |
- | Copyright (c) 2020 Michael Wallner <mike@php.net> |
+ | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
+--------------------------------------------------------------------+
*/
begin_ptr != end_ptr; string = (char *) strchr(begin_ptr, ','))
{
char buffer[HUGE_STRING_LEN];
- char *ptr, *ptr2;
+ char *ptr, *ptr2 = NULL;
uint32_t weight = 0;
if (string) {
begin_ptr = end_ptr;
}
- ptr = strchr(buffer, ':');
-
+ ptr = strchr(buffer, '[');
+ if (ptr) {
+ ptr2 = strchr(ptr+1, ']');
+ }
+ if (ptr && ptr2) {
+ // [IPv6]:port
+ ptr = strchr(ptr2+1, ':');
+ } else {
+ // IPv4:port or name:port
+ ptr = strchr(buffer, ':');
+ }
in_port_t port = 0;
if (ptr) {
ptr[0] = 0;