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

📄 pingd.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
字号:
 //	File	:  /adm/daemons/pingd.c//	Creator	:  Zazz@WizMud  (4/93)//	Updated	:  Watcher@TMI  (4/9/93)  for TMI-2 mudlib and call_out//		    removal on socket_close.////	This is the ping server.  It opens the socket and requests//	service.  When a response is received, it closes the connection.#include <mudlib.h>#include <net/socket.h>#include <uid.h>#include <net/daemons.h>inherit DAEMON; #define TIME_OUT_TIME  15#define LOG_FILE       "PS"#define log(xx)        log_file( LOG_FILE, xx )#define addr(xx)       (string)DNS_MASTER->get_host_name( xx ) + " " + \                       (int)DNS_MASTER->get_mudresource( xx , "inetd" )protected int strip_callout(int num);int notify_player( int s, string msg );int time_data( int s );void close_socket( int s );mapping pings;void create() {   seteuid( getuid() );   pings = ([ ]);}int ping_request(string mud){  // called by the _ping.c	int s, error;	string address;	if (!mud || mud=="") return 0;	address = addr( mud );	if (!address || address=="" || address == " 0") return 0; 	s = socket_create( STREAM, "read_callback", "close_callback" );	if (s<0) {	   log("ping_request, socket_create: "+socket_error(s)+"\n");	   return -1;	}	error = socket_connect( s, address, "read_callback", "write_callback" );	if(error<0) {	   log("ping_request, socket_connect: "+socket_error( error )+"\n");	   socket_close( s );  // dammit!	   return -1;	}	pings[s] = allocate_mapping(3);	pings[s]["fd"] = s;	pings[s]["time_sent"] = time();	pings[s]["mudname"] = mud;	pings[s]["player"] = this_player();       // eek.	call_out("time_out", TIME_OUT_TIME, s );	return 1;                                 // ok, now we wait...:)}void read_callback( int fd, string mess ){  // the only one that counts	notify_player(fd, "Ping returned from " + capitalize(pings[fd]["mudname"]) +		".  Transit time: " + time_data(fd) + " seconds.\n");	close_socket( fd );  // this will sever connection	return;}void time_out( int fd ){	if(pings[fd]["fd"]) {		notify_player(fd, "Ping connection with " + 		capitalize(pings[fd]["mudname"]) + " timed out. Remote host never responded.\n");		close_socket( fd );	}	return;}void close_callback( int fd ){    // this means *premature* closure	if(!pings[fd]["fd"]) return;    // Hmm...why would this happen? 	notify_player(fd, "No ping response from " +		capitalize(pings[fd]["mudname"]) + ".\n");	close_socket( fd );	return;}int notify_player( int fd, string mess ){	if(!pings[fd]["player"]) return 0;	tell_object( pings[fd]["player"], mess );	return 1;}int time_data( int fd ){	if(!pings[fd]["time_sent"]) return -1;	return (time() - pings[fd]["time_sent"]);}void close_socket( int fd ){	int error;	if(!pings[fd]["fd"]) return 0;	strip_callout( fd );	error = socket_close( fd );	if(error<0) {	   log("close_socket, socket_close: "+socket_error(error)+"\n");	   return;	}	map_delete( pings, fd );	return;}protected int strip_callout(int num){	mixed *info;	int loop;	info = call_out_info();	while(remove_call_out("time_out") != -1) { }	for(loop=0; loop<sizeof(loop); loop++) {		if(info[loop][0] != this_object())  continue;		if(info[loop][3] != num)  		call_out("time_out", info[loop][2], info[loop][3]);	}	return 1;} 

⌨️ 快捷键说明

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