Commit 72dacc35 authored by Martin Sustrik's avatar Martin Sustrik

zero-copy on tx side optimised to minimise number of user/kernel space transitions

parent 1c1dfb50
...@@ -56,12 +56,18 @@ namespace zmq ...@@ -56,12 +56,18 @@ namespace zmq
// If we are able to fill whole buffer in a single go, let's // If we are able to fill whole buffer in a single go, let's
// use zero-copy. There's no disadvantage to it as we cannot // use zero-copy. There's no disadvantage to it as we cannot
// stuck multiple messages into the buffer anyway. // stuck multiple messages into the buffer anyway. Note that
// subsequent write(s) are non-blocking, thus each single
// write writes at most SO_SNDBUF bytes at once not depending
// on how large is the chunk returned from here.
// As a consequence, large messages being sent won't block
// other engines running in the same I/O thread for excessive
// amounts of time.
if (pos == 0 && to_write >= *size_) { if (pos == 0 && to_write >= *size_) {
*data_ = write_pos; *data_ = write_pos;
write_pos += *size_; write_pos += to_write;
to_write -= *size_; pos = to_write;
pos = *size_; to_write = 0;
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment