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
75277e98
Commit
75277e98
authored
Oct 31, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor socket_guard
parent
d6b5d6c6
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
29 deletions
+33
-29
libcaf_net/caf/net/socket_guard.hpp
libcaf_net/caf/net/socket_guard.hpp
+17
-12
libcaf_net/test/socket_guard.cpp
libcaf_net/test/socket_guard.cpp
+6
-8
libcaf_net/test/stream_transport.cpp
libcaf_net/test/stream_transport.cpp
+10
-9
No files found.
libcaf_net/caf/net/socket_guard.hpp
View file @
75277e98
...
...
@@ -27,14 +27,27 @@ namespace net {
template
<
class
Socket
>
class
socket_guard
{
public:
socket_guard
()
:
sock_
(
invalid_socket_id
)
{
socket_guard
()
noexcept
:
sock_
(
invalid_socket_id
)
{
// nop
}
explicit
socket_guard
(
Socket
sock
)
:
sock_
(
sock
)
{
explicit
socket_guard
(
Socket
sock
)
noexcept
:
sock_
(
sock
)
{
// nop
}
socket_guard
(
socket_guard
&&
other
)
noexcept
:
sock_
(
other
.
release
())
{
// nop
}
socket_guard
(
const
socket_guard
&
)
=
delete
;
socket_guard
&
operator
=
(
socket_guard
&&
other
)
noexcept
{
reset
(
other
.
release
());
return
*
this
;
}
socket_guard
&
operator
=
(
const
socket_guard
&
)
=
delete
;
~
socket_guard
()
{
if
(
sock_
.
id
!=
invalid_socket_id
)
close
(
sock_
);
...
...
@@ -46,21 +59,13 @@ public:
sock_
=
x
;
}
Socket
release
()
{
Socket
release
()
noexcept
{
auto
sock
=
sock_
;
sock_
.
id
=
invalid_socket_id
;
return
sock
;
}
Socket
*
get
()
noexcept
{
return
&
sock_
;
}
Socket
*
operator
->
()
noexcept
{
return
&
sock_
;
}
Socket
&
operator
*
()
noexcept
{
Socket
socket
()
const
noexcept
{
return
sock_
;
}
...
...
libcaf_net/test/socket_guard.cpp
View file @
75277e98
...
...
@@ -32,8 +32,6 @@ namespace {
constexpr
socket_id
dummy_id
=
13
;
struct
dummy_socket
{
dummy_socket
()
=
default
;
dummy_socket
(
socket_id
id
,
bool
&
closed
)
:
id
(
id
),
closed
(
closed
)
{
// nop
}
...
...
@@ -71,7 +69,7 @@ CAF_TEST_FIXTURE_SCOPE(socket_guard_tests, fixture)
CAF_TEST
(
cleanup
)
{
{
auto
guard
=
make_socket_guard
(
sock
);
CAF_CHECK_EQUAL
(
guard
->
id
,
dummy_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
dummy_id
);
}
CAF_CHECK
(
sock
.
closed
);
}
...
...
@@ -79,11 +77,11 @@ CAF_TEST(cleanup) {
CAF_TEST
(
reset
)
{
{
auto
guard
=
make_socket_guard
(
sock
);
CAF_CHECK_EQUAL
(
guard
->
id
,
dummy_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
dummy_id
);
guard
.
release
();
CAF_CHECK_EQUAL
(
guard
->
id
,
invalid_socket_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
invalid_socket_id
);
guard
.
reset
(
sock
);
CAF_CHECK_EQUAL
(
guard
->
id
,
dummy_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
dummy_id
);
}
CAF_CHECK_EQUAL
(
sock
.
closed
,
true
);
}
...
...
@@ -91,9 +89,9 @@ CAF_TEST(reset) {
CAF_TEST
(
release
)
{
{
auto
guard
=
make_socket_guard
(
sock
);
CAF_CHECK_EQUAL
(
guard
->
id
,
dummy_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
dummy_id
);
guard
.
release
();
CAF_CHECK_EQUAL
(
guard
->
id
,
invalid_socket_id
);
CAF_CHECK_EQUAL
(
guard
.
socket
().
id
,
invalid_socket_id
);
}
CAF_CHECK_EQUAL
(
sock
.
closed
,
false
);
}
...
...
libcaf_net/test/stream_transport.cpp
View file @
75277e98
...
...
@@ -55,9 +55,9 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
mpx
->
set_thread_id
();
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
1u
);
auto
sockets
=
unbox
(
make_stream_socket_pair
());
send_socket
.
reset
(
sockets
.
first
);
recv_socket
.
reset
(
sockets
.
second
);
if
(
auto
err
=
nonblocking
(
*
recv_socket
,
true
))
send_socket
_guard
.
reset
(
sockets
.
first
);
recv_socket
_guard
.
reset
(
sockets
.
second
);
if
(
auto
err
=
nonblocking
(
recv_socket_guard
.
socket
()
,
true
))
CAF_FAIL
(
"nonblocking returned an error: "
<<
err
);
}
...
...
@@ -67,8 +67,8 @@ struct fixture : test_coordinator_fixture<>, host_fixture {
multiplexer_ptr
mpx
;
buffer_type
recv_buf
;
socket_guard
<
stream_socket
>
send_socket
;
socket_guard
<
stream_socket
>
recv_socket
;
socket_guard
<
stream_socket
>
send_socket
_guard
;
socket_guard
<
stream_socket
>
recv_socket
_guard
;
buffer_ptr
shared_buf
;
};
...
...
@@ -157,7 +157,7 @@ CAF_TEST_FIXTURE_SCOPE(endpoint_manager_tests, fixture)
CAF_TEST
(
receive
)
{
using
transport_type
=
stream_transport
<
dummy_application
>
;
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
transport_type
{
recv_socket
.
release
(),
transport_type
{
recv_socket
_guard
.
release
(),
dummy_application
{
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
...
...
@@ -166,7 +166,8 @@ CAF_TEST(receive) {
auto
&
transport
=
mgr_impl
->
transport
();
transport
.
configure_read
(
receive_policy
::
exactly
(
hello_manager
.
size
()));
CAF_CHECK_EQUAL
(
mpx
->
num_socket_managers
(),
2u
);
CAF_CHECK_EQUAL
(
write
(
*
send_socket
,
as_bytes
(
make_span
(
hello_manager
))),
CAF_CHECK_EQUAL
(
write
(
send_socket_guard
.
socket
(),
as_bytes
(
make_span
(
hello_manager
))),
hello_manager
.
size
());
CAF_MESSAGE
(
"wrote "
<<
hello_manager
.
size
()
<<
" bytes."
);
run
();
...
...
@@ -178,7 +179,7 @@ CAF_TEST(receive) {
CAF_TEST
(
resolve
and
proxy
communication
)
{
using
transport_type
=
stream_transport
<
dummy_application
>
;
auto
mgr
=
make_endpoint_manager
(
mpx
,
sys
,
transport_type
{
send_socket
.
release
(),
transport_type
{
send_socket
_guard
.
release
(),
dummy_application
{
shared_buf
}});
CAF_CHECK_EQUAL
(
mgr
->
init
(),
none
);
...
...
@@ -193,7 +194,7 @@ CAF_TEST(resolve and proxy communication) {
after
(
std
::
chrono
::
seconds
(
0
))
>>
[
&
]
{
CAF_FAIL
(
"manager did not respond with a proxy."
);
});
run
();
auto
read_res
=
read
(
*
recv_socket
,
make_span
(
recv_buf
));
auto
read_res
=
read
(
recv_socket_guard
.
socket
()
,
make_span
(
recv_buf
));
if
(
!
holds_alternative
<
size_t
>
(
read_res
))
CAF_FAIL
(
"read() returned an error: "
<<
sys
.
render
(
get
<
sec
>
(
read_res
)));
recv_buf
.
resize
(
get
<
size_t
>
(
read_res
));
...
...
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