diff --git a/sensors/slothd/slothd.c b/sensors/slothd/slothd.c
index 704dd30e852c8ce22be43119f3b5297fd29da437..ab649986905cc32811e8546686c289bd6a99e95c 100644
--- a/sensors/slothd/slothd.c
+++ b/sensors/slothd/slothd.c
@@ -93,8 +93,11 @@ int main(int argc, char **argv) {
       for (;;) {
         if (!opts->first) {
           sleep(mopts.interval);
-        }          
-        do_update();
+        }
+        get_load();
+        get_min_tty_idle();
+        get_packet_counts();
+        send_pkt();
         if (opts->once) {
           break;
         }
@@ -107,13 +110,6 @@ int main(int argc, char **argv) {
   return exitcode;
 }
 
-void do_update (void) {
-  get_load();
-  get_min_tty_idle();
-  get_packet_counts();
-  send_pkt();
-}
-
 int parse_args(int argc, char **argv) {
 
   char ch;
@@ -227,6 +223,9 @@ int init_slothd(void) {
     */
     opts->ttys[opts->numttys] = strdup("/dev/ptmx");
     opts->numttys++;
+
+    /* Open socket for SIOCGHWADDR ioctl */
+    pkt->ifd = socket(PF_INET, SOCK_DGRAM, 0);
 #endif
     while (opts->numttys < MAXTTYS && (dptr = readdir(devs))) {
       if (strstr(dptr->d_name, "tty") || strstr(dptr->d_name, "pty")) {
@@ -440,35 +439,11 @@ void get_packet_counts(void) {
   return;
 }
 
-#ifdef comment
-int get_macaddrs(char *buf, void *data) {
-
-  int i=-1, j;
-  char *maddr;
-  SLOTHD_PACKET *pkt = (SLOTHD_PACKET*)data;
- 
-  if ((maddr = strstr(buf, "MAC="))) {
-    maddr += 4;
-    ++i;
-    for (j = 0; j < MACADDRLEN; j+=3, maddr+=2) {
-      pkt->ifaces[i].macaddr[j] = *maddr;
-      pkt->ifaces[i].macaddr[j+1] = *(maddr+1);
-      pkt->ifaces[i].macaddr[j+2] = ':';
-    }
-    pkt->ifaces[i].macaddr[MACADDRLEN-1] = '\0';
-  }
-  pkt->numaddrs = i+1;
-  return 0;
-}
-#endif /* comment */
-
 int get_counters(char *buf, void *data) {
 
   SLOTHD_PACKET *pkt = (SLOTHD_PACKET*)data;
 #ifdef __linux__
-  int sfd = socket(PF_INET, SOCK_DGRAM, 0);
   struct ifreq ifr;
-
   bzero(&ifr, sizeof(struct ifreq));
 #endif
 
@@ -494,7 +469,7 @@ int get_counters(char *buf, void *data) {
     }
 #ifdef __linux__
     strcpy(ifr.ifr_name, pkt->ifaces[pkt->ifcnt].ifname);
-    if (ioctl(sfd, SIOCGIFHWADDR, &ifr) < 0) {
+    if (ioctl(pkt->ifd, SIOCGIFHWADDR, &ifr) < 0) {
       perror("error getting HWADDR");
       return -1;
     }
@@ -505,7 +480,6 @@ int get_counters(char *buf, void *data) {
     if (opts->debug) {
       printf("macaddr: %s\n", pkt->ifaces[pkt->ifcnt].addr);
     }
-    close(sfd);
 #endif
     pkt->ifcnt++;
   }
diff --git a/sensors/slothd/slothd.h b/sensors/slothd/slothd.h
index 17458e569ad62ea619bf1eaa2000652ebcecaa5b..5c50203c7833171d51704d62fd7be8fcf19a1341 100644
--- a/sensors/slothd/slothd.h
+++ b/sensors/slothd/slothd.h
@@ -68,6 +68,9 @@ typedef struct {
   double loadavg[3];
   int ifcnt;
   int sd;
+#ifdef __linux__
+  int ifd; /* IOCTL file descriptor */
+#endif
   struct sockaddr_in servaddr;
   struct {
     u_long ipkts;
@@ -91,7 +94,6 @@ typedef struct {
 
 int parse_args(int, char**);
 int init_slothd(void);
-void do_update(void);
 
 void get_min_tty_idle(void);
 void utmp_enum_terms(void);