From b2e73d7b835172abbc5e217b75faaa2daec2110d Mon Sep 17 00:00:00 2001 From: Fredrik Tolf Date: Sun, 8 Jun 2008 17:27:35 +0200 Subject: [PATCH] Added socket debugging support. --- daemon/net.c | 33 +++++++++++++++++++++++++++++++++ daemon/net.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/daemon/net.c b/daemon/net.c index ed7ad9b..a9238cb 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -358,10 +358,37 @@ void getsock(struct socket *sk) sk->refcount++; } +static void sockdebug(int level, struct socket *sk, char *format, ...) +{ + va_list args; + + if((sk->dbgnm == NULL) || (level < sk->dbglvl)) + return; + va_start(args, format); + vfprintf(stderr, format, args); + va_end(args); +} + +void socksetdebug(struct socket *sk, int level, char *nm, ...) +{ + va_list args; + char *tb; + + va_start(args, nm); + tb = vsprintf2(nm, args); + va_end(args); + sk->dbgnm = sprintf2("%s (f)", tb); + sk->back->dbgnm = sprintf2("%s (b)", tb); + free(tb); + sk->dbglvl = level; + sk->back->dbglvl = level; +} + static void freesock(struct socket *sk) { struct dgrambuf *buf; + sockdebug(1, sk, "freeing socket"); if(sk->dgram) { while((buf = sk->buf.d.f) != NULL) { sk->buf.d.f = buf->next; @@ -371,6 +398,8 @@ static void freesock(struct socket *sk) if(sk->buf.s.buf != NULL) free(sk->buf.s.buf); } + if(sk->dbgnm != NULL) + free(sk->dbgnm); free(sk); numsocks--; } @@ -476,6 +505,7 @@ void *sockgetinbuf(struct socket *sk, size_t *size) if((sk->buf.s.buf == NULL) || (sk->buf.s.datasize == 0)) { *size = 0; + sockdebug(2, sk, "read 0 bytes", *size); return(NULL); } buf = sk->buf.s.buf; @@ -484,6 +514,7 @@ void *sockgetinbuf(struct socket *sk, size_t *size) sk->buf.s.bufsize = sk->buf.s.datasize = 0; sockread(sk); } + sockdebug(2, sk, "read %ji bytes", *size); return(buf); } @@ -493,6 +524,7 @@ void sockqueue(struct socket *sk, void *data, size_t size) struct sockaddr *remote; socklen_t remotelen; + sockdebug(2, sk, "queued %ji bytes", size); if(size == 0) return; if(sk->state == SOCK_STL) @@ -753,6 +785,7 @@ static int sockflush(struct ufd *ufd) void closesock(struct socket *sk) { + sockdebug(1, sk, "closed"); sksetstate(sk, SOCK_STL); if(sk->back->eos == 0) sk->back->eos = 1; diff --git a/daemon/net.h b/daemon/net.h index b539860..be0156e 100644 --- a/daemon/net.h +++ b/daemon/net.h @@ -66,6 +66,8 @@ struct socket void (*writecb)(struct socket *sk, void *data); struct ufd *ufd; void *data; + char *dbgnm; + int dbglvl; }; struct lport { @@ -111,5 +113,6 @@ int sockpeeraddr(struct socket *sk, struct sockaddr **namebuf, socklen_t *lenbuf int getucred(struct socket *sk, uid_t *uid, gid_t *gid); int sockfamily(struct socket *sk); void quitsock(struct socket *sk); +void socksetdebug(struct socket *sk, int level, char *nm, ...); #endif -- 2.11.0