X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Fnet.c;h=ed7ad9bd061f2754c7b02b482c53a25079a62524;hb=1ff9e8ea002024dee061378ae5871619d6b979dd;hp=d64e8c8bf1008bef34834718c568f36b3639140c;hpb=81286a224f14fa0494e820739587616d8c559035;p=doldaconnect.git diff --git a/daemon/net.c b/daemon/net.c index d64e8c8..ed7ad9b 100644 --- a/daemon/net.c +++ b/daemon/net.c @@ -234,6 +234,15 @@ static void sksetstate(struct socket *sk, int state) sk->back->state = state; } +struct socket *netsockpipe(void) +{ + struct socket *sk; + + sk = sockpair(0); + sksetstate(sk, SOCK_EST); + return(sk); +} + static void closeufd(struct ufd *ufd) { if(ufd->fd != -1) @@ -381,6 +390,14 @@ void putsock(struct socket *sk) } } +void quitsock(struct socket *sk) +{ + sk->readcb = NULL; + sk->writecb = NULL; + sk->errcb = NULL; + putsock(sk); +} + static void linksock(struct scons **list, struct socket *sk) { struct scons *sc; @@ -762,6 +779,18 @@ size_t sockgetdatalen(struct socket *sk) /* return(sockgetdatalen(sk->back)); */ /* } */ +size_t socktqueuesize(struct socket *sk) +{ + size_t ret; + + ret = 0; + while(1) { + ret += sockgetdatalen(sk->back); + if((sk = sk->back->pnext) == NULL) + return(ret); + } +} + ssize_t sockqueueleft(struct socket *sk) { return(sk->back->maxbuf - sockgetdatalen(sk->back));