|
@@ -43,7 +43,7 @@
|
|
|
#include <errno.h>
|
|
|
#include <sys/epoll.h>
|
|
|
#include <string.h>
|
|
|
-
|
|
|
+#include <se_trace.h>
|
|
|
NonBlockingUnixCommunicationSocket::~NonBlockingUnixCommunicationSocket()
|
|
|
{
|
|
|
if (mEvents != NULL)
|
|
@@ -136,6 +136,10 @@ char* NonBlockingUnixCommunicationSocket::readRaw(ssize_t length)
|
|
|
do{
|
|
|
//try a direct read (maybe all data is available already)
|
|
|
step = read(mSocket, recBuf, length);
|
|
|
+ if(step == -1 && errno == EINTR && CheckForTimeout() == false){
|
|
|
+ SE_TRACE_WARNING("read is interrupted by signal\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (step == -1 && errno != EAGAIN)
|
|
|
{
|
|
|
errorDetected = true;
|
|
@@ -154,7 +158,10 @@ char* NonBlockingUnixCommunicationSocket::readRaw(ssize_t length)
|
|
|
}
|
|
|
|
|
|
//wait for events
|
|
|
- eventNum = epoll_wait(mEpoll, mEvents, MAX_EVENTS, epollTimeout);
|
|
|
+ do {
|
|
|
+ eventNum = epoll_wait(mEpoll, mEvents, MAX_EVENTS, epollTimeout);
|
|
|
+ } while (eventNum == -1 && errno == EINTR && CheckForTimeout() == false);
|
|
|
+
|
|
|
if (eventNum == -1)
|
|
|
{
|
|
|
errorDetected = true;
|
|
@@ -253,6 +260,12 @@ ssize_t NonBlockingUnixCommunicationSocket::partialRead(char* buffer, ssize_t ma
|
|
|
remaining = maxLength - totalRead;
|
|
|
|
|
|
step = read(mSocket, buffer + totalRead, (remaining > chunkSize ? chunkSize : remaining));
|
|
|
+
|
|
|
+ if(step == -1 && errno == EINTR && CheckForTimeout() == false){
|
|
|
+ SE_TRACE_WARNING("read was interrupted by signal\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
if (step == -1)
|
|
|
{
|
|
|
if (errno != EAGAIN)
|
|
@@ -291,6 +304,10 @@ ssize_t NonBlockingUnixCommunicationSocket::writeRaw(const char* data, ssize_t
|
|
|
do
|
|
|
{
|
|
|
step = write(mSocket, data + total_write, length - total_write);
|
|
|
+ if(step == -1 && errno == EINTR && CheckForTimeout() == false){
|
|
|
+ SE_TRACE_WARNING("write was interrupted by signal\n");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
if (step == -1 && errno != EAGAIN)
|
|
|
{
|
|
@@ -343,8 +360,9 @@ ssize_t NonBlockingUnixCommunicationSocket::writeRaw(const char* data, ssize_t
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- eventNum = epoll_wait(mEpoll, mEvents, MAX_EVENTS, epollTimeout);
|
|
|
+ do {
|
|
|
+ eventNum = epoll_wait(mEpoll, mEvents, MAX_EVENTS, epollTimeout);
|
|
|
+ } while (eventNum == -1 && errno == EINTR && CheckForTimeout() == false);
|
|
|
if (eventNum == -1)
|
|
|
{
|
|
|
errorDetected = true;
|