X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=daemon%2Fnet.c;h=212310a3b3c4473e3e3fed50d4e874099dd37336;hp=44974f18ab33c45bfbed47d8cd2d944c5b37b2ec;hb=c7ff7e937c3ccc7713013d423517484df5d259f2;hpb=4eba46be47f9897458fb3c985f14f75138049880 diff --git a/daemon/net.c b/daemon/net.c index 44974f1..212310a 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -172,6 +172,7 @@ static struct socket *newsock(int type) struct socket *new; new = smalloc(sizeof(*new)); + memset(new, 0, sizeof(*new)); new->refcount = 2; new->fd = -1; new->isrealsocket = 1; @@ -525,8 +526,12 @@ static void sockflush(struct socket *sk) ret = write(sk->fd, sk->outbuf.s.buf, sk->outbuf.s.datasize); if(ret < 0) { - /* For now, assume transient error, since - * the socket is polled for errors */ + if((errno != EINTR) && (errno != EAGAIN)) + { + if(sk->errcb != NULL) + sk->errcb(sk, errno, sk->data); + closesock(sk); + } break; } if(ret > 0)