Replace read/write with send/recv. 43/46343/1
authorBartlomiej Grzelewski <b.grzelewski@samsung.com>
Wed, 19 Aug 2015 10:34:04 +0000 (12:34 +0200)
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>
Wed, 19 Aug 2015 10:55:01 +0000 (12:55 +0200)
New implementation does not require to mask SIGPIPE signal in client.

Change-Id: Ic2a920b56ed9a6e3dc6627fa026857f31d5c1630

src/manager/client-async/service.cpp
src/manager/client/client-common.cpp

index 39a4379..9725432 100644 (file)
@@ -18,6 +18,8 @@
  * @author     Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
  * @version    1.0
  */
+#include <sys/types.h>
+#include <sys/socket.h>
 
 #include <service.h>
 
@@ -125,16 +127,17 @@ void Service::sendData()
     while (!m_sendQueue.empty()) {
         AsyncRequest& req = m_sendQueue.front();
 
-        ssize_t temp = TEMP_FAILURE_RETRY(write(m_socket->get(),
-                                                &req.buffer[req.written],
-                                                req.buffer.size() - req.written));
+        ssize_t temp = TEMP_FAILURE_RETRY(::send(m_socket->get(),
+                                                 &req.buffer[req.written],
+                                                 req.buffer.size() - req.written,
+                                                 MSG_NOSIGNAL));
         if (-1 == temp) {
             int err = errno;
             // can't write? -> go to sleep
             if (EAGAIN == err || EWOULDBLOCK == err)
                 return;
 
-            LogError("Error in write: " << GetErrnoString(err));
+            LogError("Error in send: " << GetErrnoString(err));
             serviceError(CKM_API_ERROR_SEND_FAILED);
             return;
         }
@@ -159,16 +162,16 @@ void Service::receiveData()
 {
     char buffer[RECV_BUFFER_SIZE];
 
-    ssize_t temp = TEMP_FAILURE_RETRY(read(m_socket->get(), buffer, RECV_BUFFER_SIZE));
+    ssize_t temp = TEMP_FAILURE_RETRY(::recv(m_socket->get(), buffer, RECV_BUFFER_SIZE,0));
     if (-1 == temp) {
         int err = errno;
-        LogError("Error in read: " << GetErrnoString(err));
+        LogError("Error in recv: " << GetErrnoString(err));
         serviceError(CKM_API_ERROR_RECV_FAILED);
         return;
     }
 
     if (0 == temp) {
-        LogError("Read return 0/Connection closed by server(?)");
+        LogError("Recv return 0/Connection closed by server(?)");
         serviceError(CKM_API_ERROR_RECV_FAILED);
         return;
     }
index 1d61e67..10d5de1 100644 (file)
@@ -241,9 +241,10 @@ int ServiceConnection::send(const CKM::RawBuffer &send_buf)
             break;
         }
 
-        ssize_t temp = TEMP_FAILURE_RETRY(write(m_socket.get(),
-                                                &send_buf[done],
-                                                send_buf.size() - done));
+        ssize_t temp = TEMP_FAILURE_RETRY(::send(m_socket.get(),
+                                                 &send_buf[done],
+                                                 send_buf.size() - done,
+                                                 MSG_NOSIGNAL));
         if (-1 == temp) {
             LogError("Error in write: " << CKM::GetErrnoString(errno));
             retCode = CKM_API_ERROR_SOCKET;
@@ -278,9 +279,10 @@ int ServiceConnection::receive(CKM::MessageBuffer &recv_buf)
             break;
         }
 
-        ssize_t temp = TEMP_FAILURE_RETRY(read(m_socket.get(),
-                                               buffer,
-                                               sizeof(buffer)));
+        ssize_t temp = TEMP_FAILURE_RETRY(::recv(m_socket.get(),
+                                                 buffer,
+                                                 sizeof(buffer),
+                                                 0));
         if(-1 == temp) {
             LogError("Error in read: " << CKM::GetErrnoString(errno));
             ec = CKM_API_ERROR_SOCKET;