80 lines · 1.4 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include <u.h>#include <libc.h> voidhogport(char *proto, int port){	char buf[256];	char dir[40]; 	snprint(buf, sizeof(buf), "%s!%d", proto, port);	if(announce(buf, dir) < 0)		fprint(2, "%s: can't hog %s\n", argv0, buf);} voidhogrange(char *str){	char *er, *sr;	int start, end; 	sr = strrchr(str, '!');	if(sr == nil)		sysfatal("bad range: %s", str);	*sr++ = 0; 	er = strchr(sr, '-');	if(er == nil)		er = sr;	else		er++; 	start = atoi(sr);	end = atoi(er);	if(end < start)		sysfatal("bad range: %s", sr); 	for(; start <= end; start++)		hogport(str, start);} voidmain(int argc, char **argv){	int i; 	ARGBEGIN{	}ARGEND; 	if(argc == 0){		fprint(2, "usage: %s portrange\n", argv0);		exits("usage");	} 	switch(rfork(RFREND|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){	case 0:		close(0);		close(1);		break;	case -1:		abort(); /* "fork failed\n" */;	default:		_exits(0);	} 	for(i = 0; i < argc; i++)		hogrange(argv[i]); 	close(2);	for(;;)		sleep(10000);}