You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2014/03/11 20:53:40 UTC

git commit: TS-2627: mgmt condense duplicated socket read code

Repository: trafficserver
Updated Branches:
  refs/heads/master 47a53bec1 -> 93fb1bbfd


TS-2627: mgmt condense duplicated socket read code

Rather than copy the code to read a fixed amount from a socket,
make a helper function and call it.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/93fb1bbf
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/93fb1bbf
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/93fb1bbf

Branch: refs/heads/master
Commit: 93fb1bbfd6e693c47db148b43197895e6e0bcf32
Parents: 47a53be
Author: James Peach <jp...@apache.org>
Authored: Mon Mar 10 17:01:07 2014 -0700
Committer: James Peach <jp...@apache.org>
Committed: Tue Mar 11 12:53:18 2014 -0700

----------------------------------------------------------------------
 CHANGES                        |   2 +
 mgmt/api/NetworkUtilsRemote.cc | 562 ++++++++++--------------------------
 mgmt/api/NetworkUtilsRemote.h  |   1 -
 3 files changed, 151 insertions(+), 414 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/93fb1bbf/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index e59b52d..3a87b9d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache Traffic Server 5.0.0
 
+  *) [TS-2627] Reduce management socket code duplication.
+
   *) [TS-2625] trafficserver.in doesn't use TS_BASE
 
   *) [TS-2624] Make thread affinity more robust

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/93fb1bbf/mgmt/api/NetworkUtilsRemote.cc
----------------------------------------------------------------------
diff --git a/mgmt/api/NetworkUtilsRemote.cc b/mgmt/api/NetworkUtilsRemote.cc
index 92a2e55..3bf941a 100644
--- a/mgmt/api/NetworkUtilsRemote.cc
+++ b/mgmt/api/NetworkUtilsRemote.cc
@@ -61,6 +61,7 @@ extern TSInitOptionT ts_init_options;
 /**********************************************************************
  * Socket Helper Functions
  **********************************************************************/
+
 void
 set_socket_paths(const char *path)
 {
@@ -381,6 +382,34 @@ connect_and_send(const char *msg, int msg_len)
   return TS_ERR_OKAY;
 }
 
+static TSError
+socket_read_conn(int fd, uint8_t * buf, size_t needed)
+{
+  size_t consumed = 0;
+  ssize_t ret;
+
+  while (needed > consumed) {
+    ret = read(fd, buf, needed - consumed);
+
+    if (ret < 0) {
+      if (errno == EAGAIN) {
+        continue;
+      } else {
+        return TS_ERR_NET_READ;
+      }
+    }
+
+    if (ret == 0) {
+      return TS_ERR_NET_EOF;
+    }
+
+    buf += ret;
+    consumed += ret;
+  }
+
+  return TS_ERR_OKAY;
+}
+
 /**************************************************************************
  * socket_write_conn
  *
@@ -398,7 +427,7 @@ connect_and_send(const char *msg, int msg_len)
  * 1) if the write returns EPIPE error, then call connect_and_send()
  * 2) return the value returned from EPIPE
  *************************************************************************/
-TSError
+static TSError
 socket_write_conn(int fd, const char *msg_buf, int bytes)
 {
   int ret, byte_wrote = 0;
@@ -407,7 +436,7 @@ socket_write_conn(int fd, const char *msg_buf, int bytes)
   if (socket_write_timeout(fd, MAX_TIME_WAIT, 0) <= 0) {
     return TS_ERR_NET_TIMEOUT;
   }
-  // read until we fulfill the number
+  // write until we fulfill the number
   while (byte_wrote < bytes) {
     ret = write(fd, msg_buf + byte_wrote, bytes - byte_wrote);
 
@@ -1043,30 +1072,17 @@ send_diags_msg(int fd, TSDiagsT mode, const char *diag_msg)
 TSError
 parse_reply(int fd)
 {
-  int ret, amount_read = 0;
+  TSError ret;
   int16_t ret_val;
 
   // check to see if anything to read; wait for specified time = 1 sec
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) { // time expires before ready to read
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the return value (TSError type)
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
 
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  ret = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (ret != TS_ERR_OKAY) {
+    return ret;
   }
 
   return (TSError) ret_val;
@@ -1085,86 +1101,48 @@ parse_reply(int fd)
 TSError
 parse_reply_list(int fd, char **list)
 {
-  int ret, amount_read = 0;
   int16_t ret_val;
   int32_t list_size;
   TSError err_t;
 
-  if (!list)
+  if (!list) {
     return TS_ERR_PARAMS;
+  }
 
   // check to see if anything to read; wait for specified time
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) {
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the return value (TSError type)
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // get the return value (TSError type)
+  err_t = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   // if !TS_ERR_OKAY, stop reading rest of msg
   err_t = (TSError) ret_val;
   if (err_t != TS_ERR_OKAY) {
     return err_t;
   }
-  // now get size of string event list
-  amount_read = 0;
-  while (amount_read < SIZE_LEN) {
-    ret = read(fd, (void *) &list_size, SIZE_LEN - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // now get size of string event list
+  err_t = socket_read_conn(fd, (uint8_t *)&list_size, SIZE_LEN);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
 
   // get the delimited event list string
   *list = (char *)ats_malloc(sizeof(char) * (list_size + 1));
-  amount_read = 0;
-  while (amount_read < list_size) {
-    ret = read(fd, (void *) *list, list_size - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        ats_free(*list);
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      ats_free(*list);
-      return TS_ERR_NET_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)(*list), list_size);
+  if (err_t != TS_ERR_OKAY) {
+    ats_free(*list);
+    *list = NULL;
+    return err_t;
   }
+
   // add end of string to end of the record value
   ((char *) (*list))[list_size] = '\0';
-
   return err_t;
 }
 
@@ -1184,7 +1162,6 @@ parse_reply_list(int fd, char **list)
 TSError
 parse_file_read_reply(int fd, int *ver, int *size, char **text)
 {
-  int ret, amount_read = 0;
   int32_t f_size;
   int16_t ret_val, f_ver;
   TSError err_t;
@@ -1196,101 +1173,52 @@ parse_file_read_reply(int fd, int *ver, int *size, char **text)
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) { // time expires before ready to read
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the error return value
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
 
-    amount_read += ret;
+  // get the error return value
+  err_t = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   // if !TS_ERR_OKAY, stop reading rest of msg
   err_t = (TSError) ret_val;
   if (err_t != TS_ERR_OKAY) {
     return err_t;
   }
-  // now get file version
-  amount_read = 0;
-  while (amount_read < SIZE_VER) {
-    ret = read(fd, (void *) &f_ver, SIZE_VER - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
 
-    amount_read += ret;
+  // now get file version
+  err_t = socket_read_conn(fd, (uint8_t *)&f_ver, SIZE_VER);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   *ver = (int) f_ver;
 
   // now get file size
-  amount_read = 0;
-  while (amount_read < SIZE_LEN) {
-    ret = read(fd, (void *) &f_size, SIZE_LEN - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)&f_size, SIZE_LEN);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   *size = (int) f_size;
 
   // check size before reading text
   if ((*size) <= 0) {
     *text = ats_strndup("", 1);                 // set to empty string
-  } else {
-    // now we got the size, we can read everything into our msg * then parse it
-    *text = (char *)ats_malloc(sizeof(char) * (f_size + 1));
-    amount_read = 0;
-    while (amount_read < f_size) {
-      ret = read(fd, (void *) *text, f_size - amount_read);
-
-      if (ret < 0) {
-        if (errno == EAGAIN)
-          continue;
-        else {
-          ats_free(*text);
-          return TS_ERR_NET_READ;
-        }
-      }
-
-      if (ret == 0) {
-        ats_free(*text);
-        return TS_ERR_NET_EOF;
-      }
+    return TS_ERR_OKAY;
+  }
 
-      amount_read += ret;
-    }
-    (*text)[f_size] = '\0';     // end the string
+  // now we got the size, we can read everything into our msg * then parse it
+  *text = (char *)ats_malloc(sizeof(char) * (f_size + 1));
+  err_t = socket_read_conn(fd, (uint8_t *)(*text), f_size);
+  if (err_t != TS_ERR_OKAY) {
+    ats_free(*text);
+    *text = NULL;
+    return err_t;
   }
 
-  return err_t;
+  (*text)[f_size] = '\0';     // end the string
+  return TS_ERR_OKAY;
 }
 
 /**********************************************************************
@@ -1310,7 +1238,6 @@ parse_file_read_reply(int fd, int *ver, int *size, char **text)
 TSError
 parse_record_get_reply(int fd, TSRecordT * rec_type, void **rec_val)
 {
-  int ret, amount_read = 0;
   int16_t ret_val, rec_t;
   int32_t rec_size;
   TSError err_t;
@@ -1322,100 +1249,52 @@ parse_record_get_reply(int fd, TSRecordT * rec_type, void **rec_val)
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) { //time expired before ready to read
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the return value (TSError type)
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // get the return value (TSError type)
+  err_t = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   // if !TS_ERR_OKAY, stop reading rest of msg
   err_t = (TSError) ret_val;
   if (err_t != TS_ERR_OKAY) {
     return err_t;
   }
-  // now get size of record_value
-  amount_read = 0;
-  while (amount_read < SIZE_LEN) {
-    ret = read(fd, (void *) &rec_size, SIZE_LEN - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
 
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // now get size of record_value
+  err_t = socket_read_conn(fd, (uint8_t *)&rec_size, SIZE_LEN);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
 
   // get the record type
-  amount_read = 0;
-  while (amount_read < SIZE_REC_T) {
-    ret = read(fd, (void *) &rec_t, SIZE_REC_T - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN) {
-        continue;
-      } else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)&rec_t, SIZE_REC_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   *rec_type = (TSRecordT) rec_t;
 
   // get record value
   // allocate correct amount of memory for record value
-  if (*rec_type == TS_REC_STRING)
+  if (*rec_type == TS_REC_STRING) {
     *rec_val = ats_malloc(sizeof(char) * (rec_size + 1));
-  else
+  } else {
     *rec_val = ats_malloc(sizeof(char) * (rec_size));
+  }
 
-  amount_read = 0;
-  while (amount_read < rec_size) {
-    ret = read(fd, (void *) *rec_val, rec_size - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        ats_free(*rec_val);
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      ats_free(*rec_val);
-      return TS_ERR_NET_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)(*rec_val), rec_size);
+  if (err_t != TS_ERR_OKAY) {
+    ats_free(*rec_val);
+    *rec_val = NULL;
+    return err_t;
   }
+
   // add end of string to end of the record value
-  if (*rec_type == TS_REC_STRING)
+  if (*rec_type == TS_REC_STRING) {
     ((char *) (*rec_val))[rec_size] = '\0';
+  }
 
   return err_t;
 }
@@ -1434,7 +1313,6 @@ parse_record_get_reply(int fd, TSRecordT * rec_type, void **rec_val)
 TSError
 parse_record_set_reply(int fd, TSActionNeedT * action_need)
 {
-  int ret, amount_read = 0;
   int16_t ret_val, action_t;
   TSError err_t;
 
@@ -1445,50 +1323,26 @@ parse_record_set_reply(int fd, TSActionNeedT * action_need)
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) {
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the return value (TSError type)
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // get the return value (TSError type)
+  err_t = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   // if !TS_ERR_OKAY, stop reading rest of msg
   err_t = (TSError) ret_val;
   if (err_t != TS_ERR_OKAY) {
     return err_t;
   }
-  // now get the action needed
-  amount_read = 0;
-  while (amount_read < SIZE_ACTION_T) {
-    ret = read(fd, (void *) &action_t, SIZE_ACTION_T - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
 
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // now get the action needed
+  err_t = socket_read_conn(fd, (uint8_t *)&action_t, SIZE_ACTION_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
-  *action_need = (TSActionNeedT) action_t;
 
+  *action_need = (TSActionNeedT) action_t;
   return err_t;
 }
 
@@ -1506,7 +1360,7 @@ parse_record_set_reply(int fd, TSActionNeedT * action_need)
 TSError
 parse_proxy_state_get_reply(int fd, TSProxyStateT * state)
 {
-  int ret, amount_read = 0;
+  TSError err_t;
   int16_t state_t;
 
   if (!state)
@@ -1516,27 +1370,14 @@ parse_proxy_state_get_reply(int fd, TSProxyStateT * state)
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) { // time expires before ready to read
     return TS_ERR_NET_TIMEOUT;
   }
-  // now get proxy state
-  amount_read = 0;
-  while (amount_read < SIZE_PROXY_T) {
-    ret = read(fd, (void *) &state_t, SIZE_PROXY_T - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
 
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // now get proxy state
+  err_t = socket_read_conn(fd, (uint8_t *)&state_t, SIZE_PROXY_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
-  *state = (TSProxyStateT) state_t;
 
+  *state = (TSProxyStateT) state_t;
   return TS_ERR_OKAY;
 }
 
@@ -1555,7 +1396,6 @@ parse_proxy_state_get_reply(int fd, TSProxyStateT * state)
 TSError
 parse_event_active_reply(int fd, bool * is_active)
 {
-  int ret, amount_read = 0;
   int16_t ret_val, active;
   TSError err_t;
 
@@ -1566,50 +1406,26 @@ parse_event_active_reply(int fd, bool * is_active)
   if (socket_read_timeout(fd, MAX_TIME_WAIT, 0) <= 0) {
     return TS_ERR_NET_TIMEOUT;
   }
-  // get the return value (TSError type)
-  while (amount_read < SIZE_ERR_T) {
-    ret = read(fd, (void *) &ret_val, SIZE_ERR_T - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // get the return value (TSError type)
+  err_t = socket_read_conn(fd, (uint8_t *)&ret_val, SIZE_ERR_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
+
   // if !TS_ERR_OKAY, stop reading rest of msg
   err_t = (TSError) ret_val;
   if (err_t != TS_ERR_OKAY) {
     return err_t;
   }
-  // now get the boolean
-  amount_read = 0;
-  while (amount_read < SIZE_BOOL) {
-    ret = read(fd, (void *) &active, SIZE_BOOL - amount_read);
 
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        return TS_ERR_NET_READ;
-      }
-    }
-
-    if (ret == 0) {
-      return TS_ERR_NET_EOF;
-    }
-    // all is good here :)
-    amount_read += ret;
+  // now get the boolean
+  err_t = socket_read_conn(fd, (uint8_t *)&active, SIZE_BOOL);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
-  *is_active = (bool) active;
 
+  *is_active = (bool) active;
   return err_t;
 }
 
@@ -1627,130 +1443,55 @@ parse_event_active_reply(int fd, bool * is_active)
 TSError
 parse_event_notification(int fd, TSEvent * event)
 {
-  int amount_read, ret;
   OpType msg_type;
   int16_t type_op;
   int32_t msg_len;
   char *event_name = NULL, *desc = NULL;
+  TSError err_t;
 
   if (!event)
     return TS_ERR_PARAMS;
 
   // read the operation type; should be EVENT_NOTIFY
-  amount_read = 0;
-  while (amount_read < SIZE_OP_T) {
-    ret = read(fd, (void *) &type_op, SIZE_OP_T - amount_read);
-
-    // the thread can receive a bad file descriptor error(EBADF)
-    // if the current socket_fd being used by this thread is invalid;
-    // this occurs when TM restarts and the client has to reconnect and
-    // get a new socket_fd; in this case, this thread will return null
-    // and die; and the client will launch a new event_poll_thread_main
-    // when it reconnects to TM
-
-    // connection broken or error
-    if ((ret < 0) && (errno != EAGAIN)) {
-      //fprintf(stderr, "[event_poll_thread_main] ERROR read event socket %d: %s\n", sock_fd, strerror((int)errno));
-      goto ERROR_READ;
-    }
-
-    if (ret == 0) {
-      goto ERROR_EOF;
-    }
-
-    // if we read some bytes keep on going.
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)&type_op, SIZE_OP_T);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
 
   // got the message type; the msg_type should be EVENT_NOTIFY
   msg_type = (OpType) type_op;
-  if (msg_type != EVENT_NOTIFY)
+  if (msg_type != EVENT_NOTIFY) {
     return TS_ERR_FAIL;
-  //fprintf(stderr, "[event_poll_thread_main] received EVENT_NOTIFY from TM\n");
+  }
 
   // read in event name length
-  amount_read = 0;
-  while (amount_read < SIZE_LEN) {
-    ret = read(fd, (void *) &msg_len, SIZE_LEN - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        //fprintf(stderr, "[event_poll_thread_main] EXIT: error reading\n");
-        goto ERROR_READ;
-      }
-    }
-
-    if (ret == 0) {
-      goto ERROR_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)&msg_len, SIZE_LEN);
+  if (err_t != TS_ERR_OKAY) {
+    return err_t;
   }
 
   // read the event name
   event_name = (char *)ats_malloc(sizeof(char) * (msg_len + 1));
-  amount_read = 0;
-  while (amount_read < msg_len) {
-    ret = read(fd, (void *) event_name, msg_len - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        goto ERROR_READ;
-      }
-    }
-
-    if (ret == 0) {
-      goto ERROR_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)event_name, msg_len);
+  if (err_t != TS_ERR_OKAY) {
+    goto fail;
   }
+
   event_name[msg_len] = '\0';   // end the string
 
   // read in event description length
-  amount_read = 0;
-  while (amount_read < SIZE_LEN) {
-    ret = read(fd, (void *) &msg_len, SIZE_LEN - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        goto ERROR_READ;
-      }
-    }
-
-    if (ret == 0) {
-      goto ERROR_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)&msg_len, SIZE_LEN);
+  if (err_t != TS_ERR_OKAY) {
+    goto fail;
   }
 
   // read the event description
   desc = (char *)ats_malloc(sizeof(char) * (msg_len + 1));
-  amount_read = 0;
-  while (amount_read < msg_len) {
-    ret = read(fd, (void *) desc, msg_len - amount_read);
-
-    if (ret < 0) {
-      if (errno == EAGAIN)
-        continue;
-      else {
-        goto ERROR_READ;
-      }
-    }
-
-    if (ret == 0) {
-      goto ERROR_EOF;
-    }
-
-    amount_read += ret;
+  err_t = socket_read_conn(fd, (uint8_t *)desc, msg_len);
+  if (err_t != TS_ERR_OKAY) {
+    goto fail;
   }
+
   desc[msg_len] = '\0';         // end the string
 
   // fill in event info
@@ -1760,13 +1501,8 @@ parse_event_notification(int fd, TSEvent * event)
 
   return TS_ERR_OKAY;
 
-ERROR_READ:
+fail:
   ats_free(event_name);
   ats_free(desc);
-  return TS_ERR_NET_READ;
-
-ERROR_EOF:
-  ats_free(event_name);
-  ats_free(desc);
-  return TS_ERR_NET_EOF;
+  return err_t;
 }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/93fb1bbf/mgmt/api/NetworkUtilsRemote.h
----------------------------------------------------------------------
diff --git a/mgmt/api/NetworkUtilsRemote.h b/mgmt/api/NetworkUtilsRemote.h
index c54d62e..b30ac14 100644
--- a/mgmt/api/NetworkUtilsRemote.h
+++ b/mgmt/api/NetworkUtilsRemote.h
@@ -64,7 +64,6 @@ TSError disconnect();
 TSError reconnect();
 TSError reconnect_loop(int num_attempts);
 TSError connect_and_send(const char *msg, int msg_len);
-TSError socket_write_conn(int fd, const char *msg_buf, int bytes);
 void *socket_test_thread(void *arg);
 
 /*****************************************************************************