/*
* $Log$
+ * Revision 1.5 2008/02/20 22:54:22 staffcvs
+ * *** empty log message ***
+ *
+ * Revision 1.4 2008/02/20 18:31:53 james
+ * *** empty log message ***
+ *
* Revision 1.3 2008/02/14 02:46:44 james
* *** empty log message ***
*
#define BUF_SIZE 16384
#define MAX_TXN 4096
+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)
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);
+}
+
+void
+socket_free_parent (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)
+ free (s->path_to_unlink);
+ close (s->fd);
+
+ free (s);
}
ret->write_buf = NULL;
ret->fd = fd;
+ ret->path_to_unlink = strdup (path);
return ret;
n =
(SLIDE_BYTES (s->write_buf) >
MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf);
- n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n);
+ n = wrap_send (s->fd, SLIDE_RPTR (s->write_buf), n);
if (n > 0)
slide_consume (s->write_buf, n);
if (n < 0)
n =
(SLIDE_SPACE (s->read_buf) >
MAX_TXN) ? MAX_TXN : SLIDE_SPACE (s->read_buf);
- n = wrap_read (s->fd, SLIDE_WPTR (s->read_buf), n);
+ n = wrap_recv (s->fd, SLIDE_WPTR (s->read_buf), n);
if (n > 0)
slide_added (s->read_buf, n);
if (n < 0)
n =
(SLIDE_BYTES (s->write_buf) >
MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf);
- n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n);
+ n = wrap_send (s->fd, SLIDE_RPTR (s->write_buf), n);
{
uint8_t *c = SLIDE_RPTR (s->write_buf);
}