summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxcomms
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-04-14 11:28:05 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-04-14 11:28:05 +0000
commit6ac30e45bc36b7122993ae192240c6b1f1f2f2c3 (patch)
tree1342be246db63e9af84b5fc5dd2bf8d29d6c9c62 /src/libs/zbxcomms
parent8364852d881235d647b4a8cb1df0dfef515a429a (diff)
downloadzabbix-6ac30e45bc36b7122993ae192240c6b1f1f2f2c3.tar.gz
zabbix-6ac30e45bc36b7122993ae192240c6b1f1f2f2c3.tar.xz
zabbix-6ac30e45bc36b7122993ae192240c6b1f1f2f2c3.zip
improoved comms for linux
git-svn-id: svn://svn.zabbix.com/trunk@4007 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxcomms')
-rw-r--r--src/libs/zbxcomms/comms.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/libs/zbxcomms/comms.c b/src/libs/zbxcomms/comms.c
index 711c3ea8..95c9f3b4 100644
--- a/src/libs/zbxcomms/comms.c
+++ b/src/libs/zbxcomms/comms.c
@@ -31,6 +31,8 @@
# define ZBX_TCP_WRITE(s, b, bl) ((ssize_t)send((s), (b), (bl), 0))
# define ZBX_TCP_READ(s, b, bl) ((ssize_t)recv((s), (b), (bl), 0))
+# define ZBX_TCP_READ_EOF(readed, requested) ( 0 == (readed) )
+
# define ZBX_TCP_ERROR SOCKET_ERROR
# define ZBX_SOCK_ERROR INVALID_SOCKET
@@ -41,6 +43,8 @@
# define ZBX_TCP_WRITE(s, b, bl) ((ssize_t)write((s), (b), (bl)))
# define ZBX_TCP_READ(s, b, bl) ((ssize_t)read((s), (b), (bl)))
+# define ZBX_TCP_READ_EOF(readed, requested) ( (requested) > (readed) || 0 == (readed) )
+
# define ZBX_TCP_ERROR -1
# define ZBX_SOCK_ERROR -1
@@ -566,9 +570,12 @@ int zbx_tcp_recv(zbx_sock_t *s, char **data)
if( ZBX_TCP_ERROR != nbytes )
{
/* fill static buffer */
- while( ZBX_TCP_ERROR != (nbytes = ZBX_TCP_READ( s->socket, s->buf_stat + read_bytes, sizeof(s->buf_stat) - read_bytes - 1)) && nbytes > 0)
+ while( (sizeof(s->buf_stat) - read_bytes - 1) > 0
+ && ZBX_TCP_ERROR != (nbytes = ZBX_TCP_READ( s->socket, s->buf_stat + read_bytes, sizeof(s->buf_stat) - read_bytes - 1)))
{
read_bytes += nbytes;
+
+ if( ZBX_TCP_READ_EOF(nbytes, sizeof(s->buf_stat) - read_bytes - 1) ) break;
}
s->buf_stat[read_bytes] = '\0';
@@ -583,13 +590,14 @@ int zbx_tcp_recv(zbx_sock_t *s, char **data)
memcpy(s->buf_dyn, s->buf_stat, sizeof(s->buf_stat));
offset = read_bytes;
-
/* fill dynamic buffer */
- while( read_bytes < expected_len && ZBX_TCP_ERROR != (nbytes = ZBX_TCP_READ(s->socket, s->buf_stat, sizeof(s->buf_stat)-1)) && nbytes > 0 )
+ while( read_bytes < expected_len && ZBX_TCP_ERROR != (nbytes = ZBX_TCP_READ(s->socket, s->buf_stat, sizeof(s->buf_stat)-1)) )
{
s->buf_stat[nbytes] = '\0';
zbx_snprintf_alloc(&(s->buf_dyn), &allocated, &offset, sizeof(s->buf_stat), "%s", s->buf_stat);
read_bytes += nbytes;
+
+ if( ZBX_TCP_READ_EOF(nbytes, sizeof(s->buf_stat) - 1) ) break;
}
*data = s->buf_dyn;