⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listen.c

📁 www工具包. 这是W3C官方支持的www支撑库. 其中提供通用目的的客户端的WebAPI: complete HTTP/1.1 (with caching, pipelining, PUT, POS
💻 C
字号:
/***	SOCKET LISTEN TOOL****	(c) COPRIGHT MIT 1995.**	Please first read the full copyright statement in the file COPYRIGH.****  Authors:**	HFN		Henrik Frystyk Nielsen (frystyk@w3.org)****  History:**	Nov 24 95	First version*/#include "WWWLib.h"			      /* Global Library Include file */#include "WWWTrans.h"#include "WWWInit.h"#include "WWWApp.h"#ifndef W3C_VERSION#define W3C_VERSION		"unspecified"#endif#define APP_NAME		"libwww-listen"#define APP_VERSION		W3C_VERSION#define OUTPUT stderr    /* output is a global target for output redirection */#define DEFAULT_PORT		1024#define DEFAULT_FORMAT		WWW_RAWtypedef struct _ListenTool {    HTRequest *		request;    int			port;} ListenTool;/* ------------------------------------------------------------------------- */PRIVATE int printer (const char * fmt, va_list pArgs){    return (vfprintf(stdout, fmt, pArgs));}PRIVATE int tracer (const char * fmt, va_list pArgs){    return (vfprintf(stderr, fmt, pArgs));}/*	Create a Listen Tool Object**	---------------------------*/PRIVATE ListenTool * ListenTool_new (void){    ListenTool * me;    if ((me = (ListenTool *) HT_CALLOC(1, sizeof(ListenTool))) == NULL)	HT_OUTOFMEM("ListenTool_new");    me->port = DEFAULT_PORT;    return me;}/*	Delete a Listen Tool Object**	---------------------------*/PRIVATE BOOL ListenTool_delete (ListenTool * me){    if (me) {	HTRequest_delete(me->request);	HT_FREE(me);	return YES;    }    return NO;}PRIVATE void Cleanup (ListenTool * me, int status){    ListenTool_delete(me);    HTEventTerminate();    HTLibTerminate();#ifdef VMS    exit(status ? status : 1);#else    exit(status ? status : 0);#endif}PRIVATE void VersionInfo (const char * name){    HTPrint("\nW3C OpenSource Software");    HTPrint("\n-----------------------\n\n");    HTPrint("\tListen tool version %s\n", APP_VERSION);    HTPrint("\tusing the W3C libwww library version %s.\n\n",HTLib_version());    HTPrint("Format\n\n");    HTPrint("\t%s -port n [-v[sopt]] [-version]\n\n", name ? name : "listen");    HTPrint("Please send feedback to the <www-lib@w3.org> mailing list,\n");    HTPrint("see \"http://www.w3.org/Library/#Forums\" for details\n\n");}PRIVATE int terminate_handler (HTRequest * request, HTResponse * response,			       void * param, int status) {    /* We are done with this request */    HTRequest_delete(request);    if (status == HT_ERROR) HTPrint("Can't listen on this port\n");    /* Terminate libwww */    HTProfile_delete();    exit(0);}/* ------------------------------------------------------------------------- *//*				  MAIN PROGRAM				     *//* ------------------------------------------------------------------------- */int main (int argc, char ** argv){        ListenTool * ms = ListenTool_new();    int status = HT_ERROR;    int	arg = 0;    /*    ** Initiate libwww. Note that we don't call a profile as these set up    ** all the client side specific things. Here we just want a very basic    ** server which doesn't do anything but forwarding what it reads to    ** stdout.    */    HTLibInit(APP_NAME, APP_VERSION);    /* Set up default event loop */    HTEventInit();    /* Need our own trace and print functions */    HTPrint_setCallback(printer);    HTTrace_setCallback(tracer);    /* Add our own filter to handle termination */    HTNet_addAfter(terminate_handler, NULL, NULL, HT_ALL, HT_FILTER_LAST);    /* Check if we should just provide some help */    if (argc==1) {	VersionInfo(argv[0]);	Cleanup(ms, 0);    }    /* Scan command Line for parameters */    for (arg=1; arg<argc ; arg++) {	if (*argv[arg] == '-') {	    /* server port */	    if (!strncmp(argv[arg], "-p", 2)) { 		ms->port = (arg+1 < argc && *argv[arg+1] != '-') ?		    atoi(argv[++arg]) : DEFAULT_PORT;	    /* Print version and exit */	    } else if (!strcmp(argv[arg], "-version")) { 		VersionInfo(argv[0]);		Cleanup(ms, 0);		#ifdef HTDEBUG	    /* trace flags */	    } else if (!strncmp(argv[arg], "-v", 2)) {		HTSetTraceMessageMask(argv[arg]+2);#endif	    } else {		VersionInfo(argv[0]);		Cleanup(ms, 0);	    }        } else {	    VersionInfo(argv[0]);	    Cleanup(ms, 0);	}    }	    /* Set up a tool to listen on this port */    if (ms->port >= 0) {	/* Register TCP as the transport */	HTTransport_add("tcp", HT_TP_SINGLE, HTReader_new, HTWriter_new);	/* Register the "noop" application layer protocol for reading */	HTProtocol_add("noop", "tcp", ms->port, NO, NULL, HTLoadSocket);	/* Set up the request */	ms->request = HTRequest_new();	HTRequest_setOutputFormat(ms->request, DEFAULT_FORMAT);	HTRequest_setOutputStream(ms->request,				  HTFWriter_new(ms->request, OUTPUT, YES));	/* Start listening on the socket */	HTPrint("Listening on port %d\n", ms->port);	if ((status = HTServeAbsolute("noop://localhost", ms->request)) == NO) {	    HTPrint("Can't listen on port %d\n", ms->port);	    Cleanup(ms, -1);	}	/* Go into the event loop... */	if (status == YES) HTEventList_newLoop();    }    Cleanup(ms, 0);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -