Moved the safe_write() and safe_read() functions here.
authorRobert James Kaes <rjkaes@users.sourceforge.net>
Sun, 16 Sep 2001 20:11:07 +0000 (20:11 +0000)
committerRobert James Kaes <rjkaes@users.sourceforge.net>
Sun, 16 Sep 2001 20:11:07 +0000 (20:11 +0000)
src/sock.c
src/sock.h

index bea3bad3d29204346fbc0604e3b1157ee8e3e959..46e51706ebbb7e1d1878aef56cf9ea753e1220c5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: sock.c,v 1.7 2001-09-07 04:18:26 rjkaes Exp $
+/* $Id: sock.c,v 1.8 2001-09-16 20:11:07 rjkaes Exp $
  *
  * Sockets are created and destroyed here. When a new connection comes in from
  * a client, we need to copy the socket and the create a second socket to the
@@ -199,6 +199,36 @@ char *getpeer_string(int fd, char *string)
        return string;
 }
 
+/*
+ * Write the buffer to the socket. If an EINTR occurs, pick up and try
+ * again.
+ */
+ssize_t safe_write(int fd, const void *buffer, size_t count)
+{
+       ssize_t len;
+
+       do {
+               len = write(fd, buffer, count);
+       } while (len < 0 && errno == EINTR);
+
+       return len;
+}
+
+/*
+ * Matched pair for safe_write(). If an EINTR occurs, pick up and try
+ * again.
+ */
+ssize_t safe_read(int fd, void *buffer, size_t count)
+{
+       ssize_t len;
+
+       do {
+               len = read(fd, buffer, count);
+       } while (len < 0 && errno == EINTR);
+
+       return len;
+}
+
 /*
  * Reads in a line of text one character at a time. Finishes when either a
  * newline is detected, or maxlen characters have been read. The function
index 61b3fc0a784f16cfd40b10b60b512364574b0607..93d97c4f88a333e28b02a24f9556ccf680f4c5d5 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: sock.h,v 1.4 2001-06-02 02:07:34 rjkaes Exp $
+/* $Id: sock.h,v 1.5 2001-09-16 20:11:07 rjkaes Exp $
  *
  * See 'sock.c' for a detailed description.
  *
@@ -37,6 +37,9 @@ extern int socket_blocking(int sock);
 extern char *getpeer_ip(int fd, char *ipaddr);
 extern char *getpeer_string(int fd, char *string);
 
+extern ssize_t safe_write(int fd, const void *buffer, size_t count);
+extern ssize_t safe_read(int fd, void *buffer, size_t count);
+
 extern ssize_t readline(int fd, char *ptr, size_t maxlen);
 
 #endif