X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=sympathy.git;a=blobdiff_plain;f=src%2Fsymsocket.c;h=05b6e3e66039407096fc712cfc438d1ca03ecf57;hp=bb8f4fff6ca42d681738cbcb74b6b380ee447aab;hb=e398b84ba34f0290e21830e36ff40719e2ec7125;hpb=e1ec8d900bb563b46145bc7a53abd8990b76e902 diff --git a/src/symsocket.c b/src/symsocket.c index bb8f4ff..05b6e3e 100644 --- a/src/symsocket.c +++ b/src/symsocket.c @@ -1,16 +1,43 @@ -/* +/* * symsocket.c: * - * Copyright (c) 2008 James McKenzie , + * Copyright (c) 2008 James McKenzie , * All rights reserved. * */ static char rcsid[] = - "$Id$"; + "$Id: symsocket.c,v 1.13 2008/03/07 14:13:40 james Exp $"; -/* - * $Log$ +/* + * $Log: symsocket.c,v $ + * Revision 1.13 2008/03/07 14:13:40 james + * *** empty log message *** + * + * Revision 1.12 2008/03/07 13:16:02 james + * *** empty log message *** + * + * Revision 1.11 2008/03/07 12:37:04 james + * *** empty log message *** + * + * Revision 1.10 2008/03/03 18:16:16 james + * *** empty log message *** + * + * Revision 1.9 2008/03/03 18:15:19 james + * *** empty log message *** + * + * Revision 1.8 2008/03/03 06:04:42 james + * *** empty log message *** + * + * Revision 1.7 2008/03/02 10:37:56 james + * *** empty log message *** + * + * Revision 1.6 2008/02/27 00:27:22 james + * *** empty log message *** + * + * 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 *** * @@ -29,7 +56,7 @@ static char rcsid[] = #include #include -#define BUF_SIZE 16384 +#define BUF_SIZE 65536 #define MAX_TXN 4096 int @@ -37,7 +64,7 @@ wrap_recv (int fd, void *buf, int len) { int red; - red = recv (fd, buf, len,0); + red = recv (fd, buf, len, 0); if (!red) return -1; @@ -54,7 +81,7 @@ wrap_send (int fd, void *buf, int len) errno = 0; - writ = send (fd, buf, len,MSG_NOSIGNAL); + writ = send (fd, buf, len, MSG_NOSIGNAL); if (!writ) return -1; @@ -75,11 +102,11 @@ socket_free (Socket * s) if (s->write_buf) slide_free (s->write_buf); if (s->path_to_unlink) { - unlink(s->path_to_unlink); - free(s->path_to_unlink); + unlink (s->path_to_unlink); + free (s->path_to_unlink); } close (s->fd); - free(s); + free (s); } void @@ -91,11 +118,11 @@ socket_free_parent (Socket * s) slide_free (s->read_buf); if (s->write_buf) slide_free (s->write_buf); - if (s->path_to_unlink) - free(s->path_to_unlink); + if (s->path_to_unlink) + free (s->path_to_unlink); close (s->fd); - free(s); + free (s); } @@ -116,36 +143,34 @@ socket_listen (char *path) return NULL; n = strlen (path) + sizeof (struct sockaddr_un); - sun = (struct sockaddr_un *) malloc (n); + sun = (struct sockaddr_un *) xmalloc (n); memset (sun, 0, n); sun->sun_family = AF_UNIX; strcpy (sun->sun_path, path); - if (bind (fd, (struct sockaddr *) sun, SUN_LEN (sun)) < 0) - { - free (sun); - close (fd); - return NULL; - } + if (bind (fd, (struct sockaddr *) sun, SUN_LEN (sun)) < 0) { + free (sun); + close (fd); + return NULL; + } free (sun); - if (listen (fd, 5) < 0) - { - close (fd); - return NULL; - } + if (listen (fd, 5) < 0) { + close (fd); + return NULL; + } set_nonblocking (fd); - ret = (Socket *) malloc (sizeof (Socket)); + ret = (Socket *) xmalloc (sizeof (Socket)); memset (ret, 0, sizeof (Socket)); ret->read_buf = NULL; ret->write_buf = NULL; ret->fd = fd; - ret->path_to_unlink=strdup(path); + ret->path_to_unlink = strdup (path); return ret; @@ -167,7 +192,7 @@ socket_accept (Socket * l) return NULL; - ret = (Socket *) malloc (sizeof (Socket)); + ret = (Socket *) xmalloc (sizeof (Socket)); memset (ret, 0, sizeof (Socket)); set_nonblocking (fd); @@ -181,7 +206,7 @@ socket_accept (Socket * l) } -/*Blocking for now*/ +/* Blocking for now */ Socket * socket_connect (char *path) { @@ -197,24 +222,23 @@ socket_connect (char *path) return NULL; n = strlen (path) + sizeof (struct sockaddr_un); - sun = (struct sockaddr_un *) malloc (n); + sun = (struct sockaddr_un *) xmalloc (n); memset (sun, 0, n); sun->sun_family = AF_UNIX; strcpy (sun->sun_path, path); - if (connect (fd, (struct sockaddr *) sun, SUN_LEN (sun))) - { - free (sun); - close (fd); - return NULL; - } + if (connect (fd, (struct sockaddr *) sun, SUN_LEN (sun))) { + free (sun); + close (fd); + return NULL; + } free (sun); set_nonblocking (fd); - ret = (Socket *) malloc (sizeof (Socket)); + ret = (Socket *) xmalloc (sizeof (Socket)); memset (ret, 0, sizeof (Socket)); ret->fd = fd; @@ -244,12 +268,11 @@ socket_pre_select (Socket * s, fd_set * rfds, fd_set * wfds) char buf[1024]; int n; - /*Server socket */ - if (SOCKET_IS_LISTENER (s)) - { - FD_SET (s->fd, rfds); - return; - } + /* Server socket */ + if (SOCKET_IS_LISTENER (s)) { + FD_SET (s->fd, rfds); + return; + } if (!SLIDE_EMPTY (s->write_buf)) FD_SET (s->fd, wfds); @@ -267,29 +290,27 @@ socket_post_select (Socket * s, fd_set * rfds, fd_set * wfds) 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 = wrap_send (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)) - { - n = - (SLIDE_SPACE (s->read_buf) > - MAX_TXN) ? MAX_TXN : SLIDE_SPACE (s->read_buf); - n = wrap_recv (s->fd, SLIDE_WPTR (s->read_buf), n); - if (n > 0) - slide_added (s->read_buf, n); - if (n < 0) - error = -1; - } + 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 = wrap_send (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)) { + n = + (SLIDE_SPACE (s->read_buf) > + MAX_TXN) ? MAX_TXN : SLIDE_SPACE (s->read_buf); + n = wrap_recv (s->fd, SLIDE_WPTR (s->read_buf), n); + if (n > 0) + slide_added (s->read_buf, n); + if (n < 0) + error = -1; + } s->msg = ipc_check_for_message_in_slide (s->read_buf);