[Commits] : Tuxbox-GIT: apps branch master updated. CVS-Final-606-g9238e6a
Tuxbox Sources
Brought to you by:
dbt1
|
From: GetAway <tux...@ne...> - 2015-07-02 20:28:31
|
Project "Tuxbox-GIT: apps":
The branch, master has been updated
via 9238e6a29abd4d55c50e21fefab0dc6a779625c1 (commit)
from a1e4044f02243c233e6302c39420da0015672b87 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 9238e6a29abd4d55c50e21fefab0dc6a779625c1
Author: GetAway <get...@t-...>
Date: Thu Jul 2 22:27:39 2015 +0200
basicsocket: fix poll
Signed-off-by: GetAway <get...@t-...>
diff --git a/misc/libs/libconnection/basicserver.cpp b/misc/libs/libconnection/basicserver.cpp
index 7d5a0c7..f892d24 100644
--- a/misc/libs/libconnection/basicserver.cpp
+++ b/misc/libs/libconnection/basicserver.cpp
@@ -36,8 +36,8 @@
#include <sys/un.h>
#include <unistd.h>
-#define RECEIVE_TIMEOUT_IN_SECONDS 5
-#define SEND_TIMEOUT_IN_SECONDS 5
+#define RECEIVE_TIMEOUT_IN_SECONDS 60
+#define SEND_TIMEOUT_IN_SECONDS 60
bool CBasicServer::receive_data(int fd, void * data, const size_t size)
{
diff --git a/misc/libs/libconnection/basicsocket.cpp b/misc/libs/libconnection/basicsocket.cpp
index cf69656..b6b282d 100644
--- a/misc/libs/libconnection/basicsocket.cpp
+++ b/misc/libs/libconnection/basicsocket.cpp
@@ -29,22 +29,24 @@
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
+#include <unistd.h>
#include <poll.h>
bool send_data(int fd, const void * data, const size_t size, const timeval timeout)
{
- char *buffer = (char *)data;
size_t left = size;
while (left > 0)
{
+ const void * buffer = (void *)((char *)data + (size - left));
int len = ::send(fd, buffer, left, MSG_DONTWAIT | MSG_NOSIGNAL);
- if (len < 0)
+ if (len == -1)
{
- perror("[basicsocket] send_data");
-
- if (errno != EINTR && errno != EAGAIN)
+ int olderr = errno;
+ if (errno != EAGAIN) // this is "write would block...", which is not an error
+ fprintf(stderr,"[basicsocket] send_data: %m (n = %d/%d, pid = %d)\n", left, size, getpid());
+ if (olderr == EPIPE || olderr == ESPIPE)
return false;
struct pollfd pfd;
@@ -59,7 +61,7 @@ bool send_data(int fd, const void * data, const size_t size, const timeval timeo
printf("[basicsocket] send timed out.\n");
return false;
}
- if (rc < 0)
+ if (rc == -1)
{
perror("[basicsocket] send_data poll");
return false;
@@ -71,10 +73,7 @@ bool send_data(int fd, const void * data, const size_t size, const timeval timeo
}
}
else
- {
- buffer += len;
left -= len;
- }
}
return true;
}
@@ -82,7 +81,6 @@ bool send_data(int fd, const void * data, const size_t size, const timeval timeo
bool receive_data(int fd, void * data, const size_t size, const timeval timeout)
{
- char *buffer = (char *)data;
size_t left = size;
while (left > 0)
@@ -92,45 +90,48 @@ bool receive_data(int fd, void * data, const size_t size, const timeval timeout)
pfd.events = POLLIN;
pfd.revents = 0;
- int to = timeout.tv_sec * 1000 + timeout.tv_usec / 1000;
-
- int rc = poll(&pfd, 1, to);
+ int rc = poll(&pfd, 1, timeout.tv_sec * 1000 + timeout.tv_usec / 1000);
if (rc == 0)
{
- printf("[basicsocket] recv timed out.\n");
+ printf("[basicsocket] receive timed out. waiting process %d\n", getpid());
return false;
}
- if (rc < 0)
+ if (rc == -1)
{
perror("[basicsocket] recv_data poll");
return false;
}
if (!(pfd.revents & POLLIN))
{
- perror("[basicsocket] recv_data POLLIN");
+ perror("[basicsocket] receive_data POLLIN");
return false;
}
- int len = ::recv(fd, data, left, MSG_DONTWAIT | MSG_NOSIGNAL);
+ void * buffer = (void *)((char *)data + (size - left));
+ int len = ::recv(fd, buffer, left, MSG_DONTWAIT | MSG_NOSIGNAL);
- if (len > 0) {
- left -= len;
- buffer += len;
- } else if (len < 0)
+ if ((len == 0) || (len == -1))
{
- perror("[basicsocket] receive_data");
- if (errno != EINTR && errno != EAGAIN)
+ if (len == -1)
+ {
+ perror("[basicsocket] receive_data");
+
+ if (errno == EPIPE || errno == ESPIPE)
+ return false;
+ }
+ else
+ {
+ /*
+ * silently return false
+ *
+ * printf("[basicsocket] no more data\n");
+ */
return false;
+ }
+
}
- else // len == 0
- {
- /*
- * silently return false
- *
- * printf("[basicsocket] no more data\n");
- */
- return false;
- }
+ else
+ left -= len;
}
return true;
}
-----------------------------------------------------------------------
Summary of changes:
misc/libs/libconnection/basicserver.cpp | 4 +-
misc/libs/libconnection/basicsocket.cpp | 65 ++++++++++++++++---------------
2 files changed, 35 insertions(+), 34 deletions(-)
--
Tuxbox-GIT: apps
|