diff options
author | Alexander Kutsan <AKutsan@luxoft.com> | 2015-05-22 11:44:39 +0300 |
---|---|---|
committer | Alexander Kutsan <AKutsan@luxoft.com> | 2015-05-25 09:03:39 +0300 |
commit | c43881248e5f295582cdcfe319cadf1308343fc9 (patch) | |
tree | 5dc915950d18b90bbe338bcdb113b38e797e9f65 | |
parent | 375ed7e0549adedfc72564a5fd0b4ffe9c39cea6 (diff) | |
download | smartdevicelink-c43881248e5f295582cdcfe319cadf1308343fc9.tar.gz |
Fix broken PIPE on Send
-rw-r--r-- | src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp b/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp index 6d6041d1a..ce3e412d2 100644 --- a/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp +++ b/src/3rd_party-static/MessageBroker/src/server/mb_tcpserver.cpp @@ -43,8 +43,11 @@ ssize_t TcpServer::Send(int fd, const std::string& data) { int bytesToSend = rep.length(); const char* ptrBuffer = rep.c_str(); do { - int retVal = send(fd, ptrBuffer, bytesToSend, 0); + int retVal = send(fd, ptrBuffer, bytesToSend, MSG_NOSIGNAL); if (retVal == -1) { + if (EPIPE == errno) { + m_purge.push_back(fd); + } return -1; } bytesToSend -= retVal; @@ -54,23 +57,24 @@ ssize_t TcpServer::Send(int fd, const std::string& data) { } bool TcpServer::Recv(int fd) { - DBG_MSG(("TcpServer::Recv(int fd)\n")); + DBG_MSG(("TcpServer::Recv(%d)\n", fd)); ssize_t nb = -1; std::string* pReceivingBuffer = getBufferFor(fd); std::vector<char> buf; buf.reserve(RECV_BUFFER_LENGTH + pReceivingBuffer->size()); - DBG_MSG(("Left in pReceivingBuffer: %d : %s\n", - pReceivingBuffer->size(), pReceivingBuffer->c_str())); + DBG_MSG(("Left in pReceivingBuffer: %d \n", + pReceivingBuffer->size())); buf.assign(pReceivingBuffer->c_str(), pReceivingBuffer->c_str() + pReceivingBuffer->size()); buf.resize(RECV_BUFFER_LENGTH + pReceivingBuffer->size()); - nb = recv(fd, &buf[pReceivingBuffer->size()], MAX_RECV_DATA, 0); + ssize_t received_bytes = recv(fd, &buf[pReceivingBuffer->size()], MAX_RECV_DATA, 0); + nb = received_bytes; DBG_MSG(("Recieved %d from %d\n", nb, fd)); nb += pReceivingBuffer->size(); DBG_MSG(("Recieved with buffer %d from %d\n", nb, fd)); - if (nb > 0) { + if (received_bytes > 0) { unsigned int recieved_data = nb; if (isWebSocket(fd)) { const unsigned int data_length = @@ -124,6 +128,8 @@ bool TcpServer::Recv(int fd) { return true; } else { + DBG_MSG(("Received %d bytes from %d; error = %d\n", + received_bytes, fd, errno)); m_purge.push_back(fd); return false; } |