Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
actor-incubator
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
actor-incubator
Commits
c08a983d
Unverified
Commit
c08a983d
authored
Sep 19, 2019
by
Dominik Charousset
Committed by
GitHub
Sep 19, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #23
Resolve empty strings to "any" address
parents
f11da3a1
aa2bd7b9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
2 deletions
+18
-2
libcaf_net/src/ip.cpp
libcaf_net/src/ip.cpp
+6
-1
libcaf_net/test/ip.cpp
libcaf_net/test/ip.cpp
+12
-1
No files found.
libcaf_net/src/ip.cpp
View file @
c08a983d
...
@@ -55,6 +55,9 @@ namespace ip {
...
@@ -55,6 +55,9 @@ namespace ip {
namespace
{
namespace
{
// Dummy port to resolve empty string with getaddrinfo.
constexpr
auto
dummy_port
=
"42"
;
void
*
fetch_in_addr
(
int
family
,
sockaddr
*
addr
)
{
void
*
fetch_in_addr
(
int
family
,
sockaddr
*
addr
)
{
if
(
family
==
AF_INET
)
if
(
family
==
AF_INET
)
return
&
reinterpret_cast
<
sockaddr_in
*>
(
addr
)
->
sin_addr
;
return
&
reinterpret_cast
<
sockaddr_in
*>
(
addr
)
->
sin_addr
;
...
@@ -83,7 +86,9 @@ std::vector<ip_address> resolve(string_view host) {
...
@@ -83,7 +86,9 @@ std::vector<ip_address> resolve(string_view host) {
hint
.
ai_flags
=
AI_PASSIVE
;
hint
.
ai_flags
=
AI_PASSIVE
;
addrinfo
*
tmp
=
nullptr
;
addrinfo
*
tmp
=
nullptr
;
std
::
string
host_str
{
host
.
begin
(),
host
.
end
()};
std
::
string
host_str
{
host
.
begin
(),
host
.
end
()};
if
(
getaddrinfo
(
host_str
.
c_str
(),
nullptr
,
&
hint
,
&
tmp
)
!=
0
)
if
(
getaddrinfo
(
host
.
empty
()
?
nullptr
:
host_str
.
c_str
(),
host
.
empty
()
?
dummy_port
:
nullptr
,
&
hint
,
&
tmp
)
!=
0
)
return
{};
return
{};
std
::
unique_ptr
<
addrinfo
,
decltype
(
freeaddrinfo
)
*>
addrs
{
tmp
,
freeaddrinfo
};
std
::
unique_ptr
<
addrinfo
,
decltype
(
freeaddrinfo
)
*>
addrs
{
tmp
,
freeaddrinfo
};
char
buffer
[
INET6_ADDRSTRLEN
];
char
buffer
[
INET6_ADDRSTRLEN
];
...
...
libcaf_net/test/ip.cpp
View file @
c08a983d
...
@@ -32,7 +32,7 @@ using namespace caf::net;
...
@@ -32,7 +32,7 @@ using namespace caf::net;
CAF_TEST_FIXTURE_SCOPE
(
ip_tests
,
host_fixture
)
CAF_TEST_FIXTURE_SCOPE
(
ip_tests
,
host_fixture
)
CAF_TEST
(
resolve
)
{
CAF_TEST
(
resolve
localhost
)
{
ip_address
v4_local
{
make_ipv4_address
(
127
,
0
,
0
,
1
)};
ip_address
v4_local
{
make_ipv4_address
(
127
,
0
,
0
,
1
)};
ip_address
v6_local
{{
0
},
{
0x1
}};
ip_address
v6_local
{{
0
},
{
0x1
}};
auto
addrs
=
ip
::
resolve
(
"localhost"
);
auto
addrs
=
ip
::
resolve
(
"localhost"
);
...
@@ -43,4 +43,15 @@ CAF_TEST(resolve) {
...
@@ -43,4 +43,15 @@ CAF_TEST(resolve) {
CAF_CHECK
(
contains
(
v4_local
)
||
contains
(
v6_local
));
CAF_CHECK
(
contains
(
v4_local
)
||
contains
(
v6_local
));
}
}
CAF_TEST
(
resolve
any
)
{
ip_address
v4_any
{
make_ipv4_address
(
0
,
0
,
0
,
0
)};
ip_address
v6_any
{{
0
},
{
0
}};
auto
addrs
=
ip
::
resolve
(
""
);
CAF_CHECK
(
!
addrs
.
empty
());
auto
contains
=
[
&
](
ip_address
x
)
{
return
std
::
count
(
addrs
.
begin
(),
addrs
.
end
(),
x
)
>
0
;
};
CAF_CHECK
(
contains
(
v4_any
)
||
contains
(
v6_any
));
}
CAF_TEST_FIXTURE_SCOPE_END
()
CAF_TEST_FIXTURE_SCOPE_END
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment