Optimised PLDM daemon to use vectored IO
This reverts commit 58c7a89cdf59e5320b45bf4c8f28cc3675a9ad18.
Signed-off-by: Zahed Hossain <zahzahed@in.ibm.com>
Change-Id: I8e786de99486ac45d710ea6918b41599cedc9c71
diff --git a/pldmd.cpp b/pldmd.cpp
index 7072312..e966164 100644
--- a/pldmd.cpp
+++ b/pldmd.cpp
@@ -71,8 +71,6 @@
}
response.insert(response.end(), completion_code);
}
- response.insert(response.begin(), type);
- response.insert(response.begin(), eid);
}
return response;
}
@@ -133,6 +131,15 @@
pldm::responder::base::registerHandlers();
pldm::responder::bios::registerHandlers();
+ // Outgoing message.
+ struct iovec iov[2]{};
+
+ // This structure contains the parameter information for the response
+ // message.
+ struct msghdr msg
+ {
+ };
+
#ifdef OEM_IBM
pldm::responder::oem_ibm::registerHandlers();
#endif
@@ -218,13 +225,20 @@
auto response = processRxMsg(requestMsg);
if (!response.empty())
{
- if (verbose)
- {
- log<level::INFO>("Sending Msg ");
- printBuffer(response);
- }
- result = sendto(socketFd(), response.data(),
- response.size(), 0, nullptr, 0);
+#ifdef VERBOSE
+ log<level::INFO>("Sending Msg ");
+ printBuffer(response);
+#endif
+ iov[0].iov_base = &requestMsg[0];
+ iov[0].iov_len =
+ sizeof(requestMsg[0]) + sizeof(requestMsg[1]);
+ iov[1].iov_base = response.data();
+ iov[1].iov_len = response.size();
+
+ msg.msg_iov = iov;
+ msg.msg_iovlen = sizeof(iov) / sizeof(iov[0]);
+
+ result = sendmsg(socketFd(), &msg, 0);
if (-1 == result)
{
returnCode = -errno;