From 09a7d6e27fa2f13a79a2a6a0e076e74b65a37f36 Mon Sep 17 00:00:00 2001 From: Bartlomiej Grzelewski Date: Wed, 19 Aug 2015 12:34:04 +0200 Subject: [PATCH] Replace read/write with send/recv. New implementation does not require to mask SIGPIPE signal in client. Change-Id: Ic2a920b56ed9a6e3dc6627fa026857f31d5c1630 --- src/manager/client-async/service.cpp | 17 ++++++++++------- src/manager/client/client-common.cpp | 14 ++++++++------ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/manager/client-async/service.cpp b/src/manager/client-async/service.cpp index 39a4379..9725432 100644 --- a/src/manager/client-async/service.cpp +++ b/src/manager/client-async/service.cpp @@ -18,6 +18,8 @@ * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com) * @version 1.0 */ +#include +#include #include @@ -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; } diff --git a/src/manager/client/client-common.cpp b/src/manager/client/client-common.cpp index 1d61e67..10d5de1 100644 --- a/src/manager/client/client-common.cpp +++ b/src/manager/client/client-common.cpp @@ -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; -- 2.7.4