X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=daemon%2Fnet.c;h=6561ae975549f503aa5079c97c2e2c97e4b72caa;hp=ed7ad9bd061f2754c7b02b482c53a25079a62524;hb=fc8e5171b7fff757b68793bb280bb9b9728af85f;hpb=1ff9e8ea002024dee061378ae5871619d6b979dd diff --git a/daemon/net.c b/daemon/net.c index ed7ad9b..6561ae9 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -358,10 +358,41 @@ void getsock(struct socket *sk) sk->refcount++; } +static void sockdebug(int level, struct socket *sk, char *format, ...) +{ + va_list args; + char *tb; + + if((sk->dbgnm == NULL) || (level > sk->dbglvl)) + return; + va_start(args, format); + tb = vsprintf2(format, args); + va_end(args); + fprintf(stderr, "%s: %s\n", sk->dbgnm, tb); + free(tb); +} + +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; + sockdebug(1, sk, "enabled debugging"); +} + 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 +402,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 +509,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 +518,7 @@ void *sockgetinbuf(struct socket *sk, size_t *size) sk->buf.s.bufsize = sk->buf.s.datasize = 0; sockread(sk); } + sockdebug(2, sk, "read %zi bytes", *size); return(buf); } @@ -493,6 +528,7 @@ void sockqueue(struct socket *sk, void *data, size_t size) struct sockaddr *remote; socklen_t remotelen; + sockdebug(2, sk, "queued %zi bytes", size); if(size == 0) return; if(sk->state == SOCK_STL) @@ -753,6 +789,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;