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
2d2f9ec9
Commit
2d2f9ec9
authored
Jul 23, 2019
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Properly deal with chunked data in pollset_updater
parent
da2ad82c
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
7 deletions
+17
-7
libcaf_net/caf/net/pollset_updater.hpp
libcaf_net/caf/net/pollset_updater.hpp
+7
-0
libcaf_net/src/pollset_updater.cpp
libcaf_net/src/pollset_updater.cpp
+10
-7
No files found.
libcaf_net/caf/net/pollset_updater.hpp
View file @
2d2f9ec9
...
@@ -18,6 +18,9 @@
...
@@ -18,6 +18,9 @@
#pragma once
#pragma once
#include <array>
#include <cstdint>
#include "caf/net/pipe_socket.hpp"
#include "caf/net/pipe_socket.hpp"
#include "caf/net/socket_manager.hpp"
#include "caf/net/socket_manager.hpp"
...
@@ -50,6 +53,10 @@ public:
...
@@ -50,6 +53,10 @@ public:
bool
handle_write_event
()
override
;
bool
handle_write_event
()
override
;
void
handle_error
(
sec
code
)
override
;
void
handle_error
(
sec
code
)
override
;
private:
std
::
array
<
char
,
sizeof
(
intptr_t
)
>
buf_
;
size_t
buf_size_
;
};
};
}
// namespace net
}
// namespace net
...
...
libcaf_net/src/pollset_updater.cpp
View file @
2d2f9ec9
...
@@ -27,7 +27,7 @@ namespace net {
...
@@ -27,7 +27,7 @@ namespace net {
pollset_updater
::
pollset_updater
(
pipe_socket
read_handle
,
pollset_updater
::
pollset_updater
(
pipe_socket
read_handle
,
multiplexer_ptr
parent
)
multiplexer_ptr
parent
)
:
super
(
read_handle
,
std
::
move
(
parent
))
{
:
super
(
read_handle
,
std
::
move
(
parent
))
,
buf_size_
(
0
)
{
mask_
=
operation
::
read
;
mask_
=
operation
::
read
;
nonblocking
(
read_handle
,
true
);
nonblocking
(
read_handle
,
true
);
}
}
...
@@ -38,13 +38,16 @@ pollset_updater::~pollset_updater() {
...
@@ -38,13 +38,16 @@ pollset_updater::~pollset_updater() {
bool
pollset_updater
::
handle_read_event
()
{
bool
pollset_updater
::
handle_read_event
()
{
for
(;;)
{
for
(;;)
{
intptr_t
value
;
auto
res
=
read
(
handle
(),
buf_
.
data
(),
buf_
.
size
()
-
buf_size_
);
auto
res
=
read
(
handle
(),
&
value
,
sizeof
(
intptr_t
));
if
(
auto
num_bytes
=
get_if
<
size_t
>
(
&
res
))
{
if
(
auto
num_bytes
=
get_if
<
size_t
>
(
&
res
))
{
CAF_ASSERT
(
*
num_bytes
==
sizeof
(
intptr_t
));
buf_size_
+=
*
num_bytes
;
socket_manager_ptr
mgr
{
reinterpret_cast
<
socket_manager
*>
(
value
),
false
};
if
(
buf_
.
size
()
==
buf_size_
)
{
if
(
auto
ptr
=
parent_
.
lock
())
buf_size_
=
0
;
ptr
->
update
(
mgr
);
auto
value
=
*
reinterpret_cast
<
intptr_t
*>
(
buf_
.
data
());
socket_manager_ptr
mgr
{
reinterpret_cast
<
socket_manager
*>
(
value
),
false
};
if
(
auto
ptr
=
parent_
.
lock
())
ptr
->
update
(
mgr
);
}
}
else
{
}
else
{
return
get
<
sec
>
(
res
)
==
sec
::
unavailable_or_would_block
;
return
get
<
sec
>
(
res
)
==
sec
::
unavailable_or_would_block
;
}
}
...
...
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