xref: /dflybsd-src/test/socket/checkfd/checkfd.c (revision 73610d44ed87143945db264816803a31975470b5)
1*73610d44SSepherosa Ziehau #include <err.h>
2*73610d44SSepherosa Ziehau #include <errno.h>
3*73610d44SSepherosa Ziehau #include <stdio.h>
4*73610d44SSepherosa Ziehau #include <stdlib.h>
5*73610d44SSepherosa Ziehau #include <unistd.h>
6*73610d44SSepherosa Ziehau 
7*73610d44SSepherosa Ziehau int
main(int argc,char * argv[])8*73610d44SSepherosa Ziehau main(int argc, char *argv[])
9*73610d44SSepherosa Ziehau {
10*73610d44SSepherosa Ziehau 	int i;
11*73610d44SSepherosa Ziehau 
12*73610d44SSepherosa Ziehau 	if (argc < 2)
13*73610d44SSepherosa Ziehau 		exit(1);
14*73610d44SSepherosa Ziehau 
15*73610d44SSepherosa Ziehau 	for (i = 1; i < argc; ++i) {
16*73610d44SSepherosa Ziehau 		char *endptr;
17*73610d44SSepherosa Ziehau 		int fd;
18*73610d44SSepherosa Ziehau 
19*73610d44SSepherosa Ziehau 		fd = strtol(argv[i], &endptr, 10);
20*73610d44SSepherosa Ziehau 		if (*endptr != '\0')
21*73610d44SSepherosa Ziehau 			exit(1);
22*73610d44SSepherosa Ziehau 
23*73610d44SSepherosa Ziehau 		if (close(fd) < 0) {
24*73610d44SSepherosa Ziehau 			int error = errno;
25*73610d44SSepherosa Ziehau 
26*73610d44SSepherosa Ziehau 			if (error != EBADF) {
27*73610d44SSepherosa Ziehau 				warnx("close error %d", error);
28*73610d44SSepherosa Ziehau 				exit(2);
29*73610d44SSepherosa Ziehau 			}
30*73610d44SSepherosa Ziehau 		} else {
31*73610d44SSepherosa Ziehau 			warnx("%d is still valid", fd);
32*73610d44SSepherosa Ziehau 			exit(2);
33*73610d44SSepherosa Ziehau 		}
34*73610d44SSepherosa Ziehau 	}
35*73610d44SSepherosa Ziehau 	exit(0);
36*73610d44SSepherosa Ziehau }
37