xref: /plan9/sys/src/libventi/hangup.c (revision 368c31ab13393dea083228fdd1c3445076f83a4b)
1*368c31abSDavid du Colombier #include <u.h>
2*368c31abSDavid du Colombier #ifdef PLAN9PORT
3*368c31abSDavid du Colombier #include <sys/socket.h>
4*368c31abSDavid du Colombier #endif
5*368c31abSDavid du Colombier #include <libc.h>
6*368c31abSDavid du Colombier #include <venti.h>
7*368c31abSDavid du Colombier #include "queue.h"
8*368c31abSDavid du Colombier 
9*368c31abSDavid du Colombier void
vthangup(VtConn * z)10*368c31abSDavid du Colombier vthangup(VtConn *z)
11*368c31abSDavid du Colombier {
12*368c31abSDavid du Colombier 	qlock(&z->lk);
13*368c31abSDavid du Colombier 	z->state = VtStateClosed;
14*368c31abSDavid du Colombier #ifdef PLAN9PORT
15*368c31abSDavid du Colombier 	/* try to make the read in vtrecvproc fail */
16*368c31abSDavid du Colombier 	shutdown(SHUT_WR, z->infd);
17*368c31abSDavid du Colombier 	shutdown(SHUT_WR, z->outfd);
18*368c31abSDavid du Colombier #endif
19*368c31abSDavid du Colombier 	if(z->infd >= 0)
20*368c31abSDavid du Colombier 		close(z->infd);
21*368c31abSDavid du Colombier 	if(z->outfd >= 0 && z->outfd != z->infd)
22*368c31abSDavid du Colombier 		close(z->outfd);
23*368c31abSDavid du Colombier 	z->infd = -1;
24*368c31abSDavid du Colombier 	z->outfd = -1;
25*368c31abSDavid du Colombier 	if(z->writeq)
26*368c31abSDavid du Colombier 		_vtqhangup(z->writeq);
27*368c31abSDavid du Colombier 	if(z->readq)
28*368c31abSDavid du Colombier 		_vtqhangup(z->readq);
29*368c31abSDavid du Colombier 	qunlock(&z->lk);
30*368c31abSDavid du Colombier }
31*368c31abSDavid du Colombier 
32