X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=daemon%2Fnet.c;h=121050cf4eba6bfe11d89a1393adfff3c84e1388;hp=6561ae975549f503aa5079c97c2e2c97e4b72caa;hb=8d7a1e880011bbb660895f022a9f250f3cfda391;hpb=fc8e5171b7fff757b68793bb280bb9b9728af85f diff --git a/daemon/net.c b/daemon/net.c index 6561ae9..121050c 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -1003,6 +1003,8 @@ struct socket *netcsconn(struct sockaddr *addr, socklen_t addrlen, void (*func)( memcpy(sk->ufd->d.s.remote = smalloc(addrlen), addr, sk->ufd->d.s.remotelen = addrlen); sk->back->conncb = func; sk->back->data = data; + getsock(sk->back); + putsock(sk); if(!connect(sk->ufd->fd, addr, addrlen)) { sksetstate(sk, SOCK_EST); @@ -1074,10 +1076,18 @@ static void runbatches(void) static void cleansocks(void) { struct ufd *ufd, *next; + int dead; for(ufd = ufds; ufd != NULL; ufd = next) { next = ufd->next; - if(ufd->sk && ((ufd->fd < 0) || (sockgetdatalen(ufd->sk) == 0))) { + if(ufd->sk) { + dead = (ufd->fd < 0); + if(ufd->sk->state == SOCK_STL) + dead = 1; + if((ufd->sk->state == SOCK_EST) && (sockgetdatalen(ufd->sk) == 0)) + dead = 1; + if(!dead) + continue; if(ufd->sk->eos == 1) { ufd->sk->eos = 2; closeufd(ufd);