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

📄 ddns.c

📁 一个收集所有最基本功能的函数库;所有的函数都是尽量短小和简单 使用 doxygen 生成文档 所有代码以在 Linux 系统上可以编译并运行为准;每当在 lib 目录里增加了一个功能函数
💻 C
字号:
/*************************************************************************** *            ddns.c * *  Mon May 22 12:14:44 2007 *  Copyright  2007  kf701 *  Email kf_701@21cn.com ****************************************************************************/#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <glib.h>#include "kf701.h"GHashTable * table;/* data protocol: userid=xxx\r\n */void run(struct sockaddr *addr, uint8_t *data, uint32_t size){	gchar *userid = g_malloc0( 32 );	if ( 1 != sscanf( (const char*)data, "userid=%s", userid ) )	{		sys_warn("bad user data\n");		g_free( userid );		return;	}	gpointer value = g_malloc0( sizeof(struct sockaddr) );	memcpy( value, addr, sizeof(struct sockaddr) );	g_hash_table_insert( table, userid, value );}int main(int argc, char **argv){	bool background = false;	uint16_t port = 8080;	debug_verbose = 4;	void usage()	{		printf("Usage: ddns.out -p port -d debug_level -b\n");		exit( 0 );	}	int opt;	opterr = 0;	while ((opt = getopt (argc, argv, "d:p:b")) != -1)	{		switch (opt)		{			case 'b':				background = true;				break;			case 'd':				debug_verbose = atoi( optarg );				break;			case 'p':				port = (uint16_t)atoi( optarg );				break;			case 'h':				usage();				break;			default:				;		}	}	if( background )		daemon( 0, 0 );	table = g_hash_table_new_full(g_str_hash,g_str_equal,g_free,g_free);	sys_log("start,listen port %d ...\n",port);	udp_server( port, 1024, run );	return 0;}

⌨️ 快捷键说明

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