From ccc64e79a870d37ddff7afa92a41fd9a8dbecd42 Mon Sep 17 00:00:00 2001 From: james <> Date: Thu, 14 Feb 2008 00:57:58 +0000 Subject: *** empty log message *** --- src/symsocket.c | 126 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 69 insertions(+), 57 deletions(-) (limited to 'src/symsocket.c') diff --git a/src/symsocket.c b/src/symsocket.c index fde1b2d..25657db 100644 --- a/src/symsocket.c +++ b/src/symsocket.c @@ -6,10 +6,14 @@ * */ -static char rcsid[] = "$Id$"; +static char rcsid[] = + "$Id$"; /* * $Log$ + * Revision 1.2 2008/02/14 00:57:58 james + * *** empty log message *** + * * Revision 1.1 2008/02/13 18:05:06 james * *** empty log message *** * @@ -23,12 +27,16 @@ static char rcsid[] = "$Id$"; #define MAX_TXN 4096 -void socket_free(Socket *s) +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); -close(s->fd); + if (!s) + return; + if (s->read_buf) + slide_free (s->read_buf); + if (s->write_buf) + slide_free (s->write_buf); + close (s->fd); } @@ -122,7 +130,6 @@ socket_connect (char *path) struct sockaddr_un *sun; Socket *ret; - unlink (path); fd = socket (PF_UNIX, SOCK_STREAM, 0); @@ -157,30 +164,57 @@ socket_connect (char *path) return ret; } +void +socket_consume_msg (Socket * s) +{ + int n; -Socket * -socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) + if (!s->msg) + return; + + ipc_consume_message_in_slide(s->read_buf); + s->msg = ipc_check_for_message_in_slide (s->read_buf); + +} + +void +socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds) { char buf[1024]; int n; + /*Server socket */ if (SOCKET_IS_LISTENER (s)) { - if (!FD_ISSET (s->fd, rfds)) - return NULL; - - return socket_accept (s); + FD_SET (s->fd, rfds); + return; } + if (!SLIDE_EMPTY (s->write_buf)) + FD_SET (s->fd, wfds); + + if (!SLIDE_FULL (s->read_buf)) + FD_SET (s->fd, rfds); + +} + +int +socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) +{ + char buf[1024]; + int n; + int error=0; + if ((!SLIDE_EMPTY (s->write_buf)) && FD_ISSET (s->fd, wfds)) { n = (SLIDE_BYTES (s->write_buf) > MAX_TXN) ? MAX_TXN : SLIDE_BYTES (s->write_buf); - n = write (s->fd, SLIDE_RPTR (s->write_buf), n); + n = wrap_write (s->fd, SLIDE_RPTR (s->write_buf), n); if (n > 0) slide_consume (s->write_buf, n); + if (n<0) error=-1; } if (!SLIDE_FULL (s->read_buf) && FD_ISSET (s->fd, rfds)) @@ -188,62 +222,40 @@ 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 = read (s->fd, SLIDE_RPTR (s->read_buf), n); - + n = wrap_read (s->fd, SLIDE_WPTR (s->read_buf), n); if (n > 0) slide_added (s->read_buf, n); + if (n<0) error=-1; } - if (SLIDE_BYTES (s->read_buf) >= sizeof (IPC_Msg)) - { - s->msg = ipc_check_for_message_in_slide(s->read_buf); - } else { - s->msg=NULL; - } - + s->msg = ipc_check_for_message_in_slide (s->read_buf); - return NULL; + return error; } -void socket_consume_msg(Socket *s) -{ -int n; - -if (!s->msg) return; - -n=s->msg->size; - -slide_consume(s->read_buf,n); - - if (SLIDE_BYTES (s->read_buf) >= sizeof (IPC_Msg)) - { - s->msg = ipc_check_for_message_in_slide(s->read_buf); - } else { - s->msg=NULL; - } - -} -void -socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds) +int +socket_write (Socket * s, void *buf, int len) { - char buf[1024]; int n; - /*Server socket */ - if (SOCKET_IS_LISTENER (s)) - { - FD_SET (s->fd, rfds); - return; - } + slide_expand (s->write_buf, len); + memcpy (SLIDE_WPTR (s->write_buf), buf, len); + slide_added (s->write_buf, len); - if (!SLIDE_EMPTY (s->write_buf)) - FD_SET (s->fd, 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); + { + uint8_t *c=SLIDE_RPTR(s->write_buf); + } - if (!SLIDE_FULL (s->read_buf)) - FD_SET (s->fd, rfds); + if (n > 0) + slide_consume (s->write_buf, n); + + if (n<0) return -1; + return len; } - - -- cgit v1.2.3