+int
+wrap_recv (int fd, void *buf, int len)
+{
+ int red;
+
+ red = recv (fd, buf, len, 0);
+ if (!red)
+ return -1;
+
+ if ((red < 0) && (errno == EAGAIN))
+ red = 0;
+
+ return red;
+}
+
+int
+wrap_send (int fd, void *buf, int len)
+{
+ int writ;
+
+ errno = 0;
+
+ writ = send (fd, buf, len, MSG_NOSIGNAL);
+
+ if (!writ)
+ return -1;
+
+ if ((writ < 0) && (errno == EAGAIN))
+ writ = 0;
+
+ return writ;
+}
+
+void
+socket_free (Socket * s)
+{
+ if (!s)
+ return;
+ if (s->read_buf)
+ slide_free (s->read_buf);
+ if (s->write_buf)
+ slide_free (s->write_buf);
+ if (s->path_to_unlink)
+ {
+ unlink (s->path_to_unlink);
+ free (s->path_to_unlink);
+ }
+ close (s->fd);
+ free (s);
+}