[COMMIT seastar master] Use recv syscall instead of read in do_read_some()

3 views
Skip to first unread message

Commit Bot

<bot@cloudius-systems.com>
unread,
Jun 26, 2022, 8:43:04 AM6/26/22
to seastar-dev@googlegroups.com, Marc Richards
From: Marc Richards <talaw...@users.noreply.github.com>
Committer: Avi Kivity <a...@scylladb.com>
Branch: master

Use recv syscall instead of read in do_read_some()

---
diff --git a/include/seastar/core/posix.hh b/include/seastar/core/posix.hh
--- a/include/seastar/core/posix.hh
+++ b/include/seastar/core/posix.hh
@@ -226,13 +226,13 @@ public:
throw_system_error_on(r == -1, "read");
return { size_t(r) };
}
- std::optional<ssize_t> recv(void* buffer, size_t len, int flags) {
+ std::optional<size_t> recv(void* buffer, size_t len, int flags) {
auto r = ::recv(_fd, buffer, len, flags);
if (r == -1 && errno == EAGAIN) {
return {};
}
throw_system_error_on(r == -1, "recv");
- return { ssize_t(r) };
+ return { size_t(r) };
}
std::optional<size_t> recvmsg(msghdr* mh, int flags) {
auto r = ::recvmsg(_fd, mh, flags);
diff --git a/src/core/reactor.cc b/src/core/reactor.cc
--- a/src/core/reactor.cc
+++ b/src/core/reactor.cc
@@ -265,7 +265,7 @@ future<> reactor::do_connect(pollable_fd_state& pfd, socket_address& sa) {
future<size_t>
reactor::do_read_some(pollable_fd_state& fd, void* buffer, size_t len) {
return readable(fd).then([this, &fd, buffer, len] () mutable {
- auto r = fd.fd.read(buffer, len);
+ auto r = fd.fd.recv(buffer, len, 0);
if (!r) {
return do_read_some(fd, buffer, len);
}
@@ -280,7 +280,7 @@ future<temporary_buffer<char>>
reactor::do_read_some(pollable_fd_state& fd, internal::buffer_allocator* ba) {
return fd.readable().then([this, &fd, ba] {
auto buffer = ba->allocate_buffer();
- auto r = fd.fd.read(buffer.get_write(), buffer.size());
+ auto r = fd.fd.recv(buffer.get_write(), buffer.size(), 0);
if (!r) {
// Speculation failure, try again with real polling this time
// Note we release the buffer and will reallocate it when poll
Reply all
Reply to author
Forward
0 new messages