aboutsummaryrefslogtreecommitdiffstats
path: root/src/symsocket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/symsocket.c')
-rw-r--r--src/symsocket.c63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/symsocket.c b/src/symsocket.c
index 061ff6d..bb8f4ff 100644
--- a/src/symsocket.c
+++ b/src/symsocket.c
@@ -11,6 +11,9 @@ static char rcsid[] =
/*
* $Log$
+ * 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 ***
*
@@ -29,6 +32,38 @@ static char rcsid[] =
#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)
@@ -39,7 +74,28 @@ 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);
}
@@ -89,6 +145,7 @@ socket_listen (char *path)
ret->write_buf = NULL;
ret->fd = fd;
+ ret->path_to_unlink=strdup(path);
return ret;
@@ -215,7 +272,7 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds)
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)
@@ -227,7 +284,7 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds)
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)
@@ -253,7 +310,7 @@ socket_write (Socket * s, void *buf, int len)
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);
}