Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
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
Operations
Operations
Metrics
Environments
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 Framework
Commits
7267d945
Commit
7267d945
authored
Jun 14, 2021
by
Wei Xie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
If write op returns ssl_error_want_read, don't write until SSL connection is established.
parent
b9f000ae
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
21 additions
and
6 deletions
+21
-6
libcaf_io/caf/io/network/rw_state.hpp
libcaf_io/caf/io/network/rw_state.hpp
+3
-1
libcaf_io/caf/io/network/stream.hpp
libcaf_io/caf/io/network/stream.hpp
+1
-0
libcaf_io/src/io/network/stream.cpp
libcaf_io/src/io/network/stream.cpp
+16
-1
libcaf_openssl/src/openssl/session.cpp
libcaf_openssl/src/openssl/session.cpp
+1
-4
No files found.
libcaf_io/caf/io/network/rw_state.hpp
View file @
7267d945
...
...
@@ -13,7 +13,9 @@ enum class rw_state {
/// Reports that the socket is closed or faulty.
failure
,
/// Reports that an empty buffer is in use and no operation was performed.
indeterminate
indeterminate
,
/// Reports an ssl error: ssl_error_want_read
ssl_error_want_read
};
}
// namespace caf::io::network
libcaf_io/caf/io/network/stream.hpp
View file @
7267d945
...
...
@@ -136,6 +136,7 @@ private:
size_t
written_
;
byte_buffer
wr_buf_
;
byte_buffer
wr_offline_buf_
;
bool
wr_op_backoff_
;
};
}
// namespace caf::io::network
libcaf_io/src/io/network/stream.cpp
View file @
7267d945
...
...
@@ -21,7 +21,8 @@ stream::stream(default_multiplexer& backend_ref, native_socket sockfd)
defaults
::
middleman
::
max_consecutive_reads
)),
read_threshold_
(
1
),
collected_
(
0
),
written_
(
0
)
{
written_
(
0
),
wr_op_backoff_
(
false
)
{
configure_read
(
receive_policy
::
at_most
(
1024
));
}
...
...
@@ -143,6 +144,13 @@ bool stream::handle_read_result(rw_state read_result, size_t rb) {
case
rw_state
:
:
indeterminate
:
return
false
;
case
rw_state
:
:
success
:
// if it is the first rw_state::success after SSL_connect,
// the ssl connection is established. We recover previous pending write OP.
if
(
wr_op_backoff_
)
{
backend
().
add
(
operation
::
write
,
fd
(),
this
);
wr_op_backoff_
=
false
;
}
case
rw_state
:
:
ssl_error_want_read
:
if
(
rb
==
0
)
return
false
;
collected_
+=
rb
;
...
...
@@ -168,6 +176,13 @@ void stream::handle_write_result(rw_state write_result, size_t wb) {
case
rw_state
:
:
indeterminate
:
prepare_next_write
();
break
;
case
rw_state
:
:
ssl_error_want_read
:
// if write op returns ssl_error_want_read, don't write until SSL connection is established.
// otherwise, any write OP will get ssl_error_want_read immediately, causing spinning and high CPU usage.
backend
().
del
(
operation
::
write
,
fd
(),
this
);
wr_op_backoff_
=
true
;
if
(
wb
==
0
)
break
;
case
rw_state
:
:
success
:
written_
+=
wb
;
CAF_ASSERT
(
written_
<=
wr_buf_
.
size
());
...
...
libcaf_openssl/src/openssl/session.cpp
View file @
7267d945
...
...
@@ -94,10 +94,7 @@ rw_state session::do_some(int (*f)(SSL*, void*, int), size_t& result, void* buf,
return
rw_state
::
failure
;
case
SSL_ERROR_WANT_READ
:
CAF_LOG_DEBUG
(
"SSL_ERROR_WANT_READ reported"
);
// Report success to poll on this socket.
if
(
len
==
0
&&
strcmp
(
debug_name
,
"write_some"
)
==
0
)
return
rw_state
::
indeterminate
;
return
rw_state
::
success
;
return
rw_state
::
ssl_error_want_read
;
case
SSL_ERROR_WANT_WRITE
:
CAF_LOG_DEBUG
(
"SSL_ERROR_WANT_WRITE reported"
);
// Report success to poll on this socket.
...
...
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