- 博客(44)
- 资源 (1)
- 收藏
- 关注
转载 libevent+zeromq
<br /> ZeroMq with libevent (cont)<br />I have just discovered the reason why my libevent program did not receive any more ZeroMq messages after the first one. It seems that, after creating the ZeroMq socket, you have to read until you get a EAGAIN error o
2011-05-31 17:37:00
3059
原创 Jabberd2源码分析: 客户端BIND
<br /><br />客户端资源绑定<br /> <br />当客户端身份验证成功后,服务器端features中指定需要BIND资源,则客户端发送bind请求。<br /> <br />client->c2s:<br /><iq type="set" id="32"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>Gajim</resource></bind></iq><br /> <br />当收到服务器的stream:features中
2011-04-14 17:35:00
2191
2
原创 搭建jabberd2服务器
1, 操作系统为RedHat Enterprise Linux 5, 选择了最小化安装。我们的目的是不使用系统里现有的库,全部使用我们自己编译的,这样做的目的是搭建出一个不依赖系统jabberd。2, 准备了使用的安装包: cyrus-sasl-2.1.23.tar.gz jabberd-2.2.11.tar.bz2 libidn-1.19.tar.gz openssl-1.0.0a.tar.gz expat-2.0.1.tar.gz libgcrypt-1.4.6.ta
2011-03-30 13:53:00
2204
4
原创 Jabberd2源代码分析: client连接c2s
<br /><br />客户端连接c2s<br /> <br />c2s调用mio_listen后,处于监听状态,等待客户端连接。<br /> <br />client->c2s: connect->accept<br />客户端连接c2s服务器5222端口<br /> <br />当mio检测到处于监听状态的socket可读后,调用_mio_accept函数<br />void _mio_accept(mio_t m, mio_fd_t fd)<br />该函数中调用accept返回一个新的socket
2011-03-29 17:45:00
2590
1
原创 Jabberd2源代码分析:c2s与router SASL验证过程
<br /> <br />c2s启动后,主动连接router服务器的消息流程:<br /> <br />c2s->router: <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xmlns:ack='http://www.xmpp.org/extensions/xep-0198.html#ns'><br /> <br />发送完<stream>数据后,c2s进入
2011-03-29 16:05:00
1993
原创 Jabberd2源码分析: 绑定到router
<br /><br />绑定到router<br /> <br />c2s->rouer:<br /><bind xmlns='http://jabberd.jabberstudio.org/ns/component/1.0' name='c2s'/><br /> <br />router->c2s:<br /><bind xmlns='http://jabberd.jabberstudio.org/ns/component/1.0'/><br /> <br />c2s收到服务器返回的bind消息后,最终执
2011-03-29 15:46:00
1506
原创 Jabberd2源代码分析: MIO
MIO用于封装select epool poll kqueue使统一API。可以再不同的平台选择对应的IO复用技术typedef struct mio_st{ void (*mio_free)(struct mio_st **m); struct mio_fd_st *(*mio_listen)(struct mio_st **m, int port, char *sourceip, mio_handler_t app, void *arg); struct mio_
2011-03-04 17:46:00
2009
1
原创 Jabberd2源代码分析: SX
SX模块提供了Jabberd2的插件机制。在代码的关键部位为了扩展方便设置执行点,如果在此执行点上设置了“插件”,则按照注册插件的顺序执行这些注册的函数。Jabberd2定义了一下结构体:/** a plugin */struct _sx_plugin_st { sx_env_t env; /* unique id so that plugins can find each other */ int magic; int in
2011-03-04 15:21:00
2552
原创 Jabberd2源代码分析:spool
spool利用pool来方便处理动态增长的字符串,spool维护一个单向链表,每追加一个字符串对应链表一个节点,这样的好处是可以很快速的追加新的字符串,而不需要使用realloc来动态扩展内存空间。只有当需要使用完整的字符串的时候,才动态分配一个大的内存空间,来合并链表中的所有节点。传统的动态增长字符串的处理中一般都是预先分配比较大的内存空间,每次追加新字符串的时候,判断剩余内存是否够用,如果不够,需要使用realloc重新分配或者扩展内存大小。realloc如果是需要重新分配新的内存地址的时候,这时需要将
2011-02-25 17:01:00
1301
原创 Jabberd2源代码分析:pool
pool.c文件分析:当程序里有大量的频繁的动态分配内存的情况,如果每次分配后都要记得释放该内存,往往会因为各种原因没有释放,从而导致内存泄露,pool提供了这样的机制,不需要为每次分配的内存都要调用释放内存函数,而是在某一时刻集中释放所有动态分配的内存,这种机制的好处是:1,增强了代码的可读性,方便程序编写,不需要一个malloc函数必须对应一个free函数;2,有效的避免了内存泄露的发生。pool.h文件中提供的接口:使用到的结构体:struct pheap 用于保存单次分配的内存struct
2011-02-25 16:56:00
1102
原创 Jabberd2源代码分析: JID
使用XMPP协议通信过程中,任何实体都需要一个ID来唯一标示,一个XMPP实体地址被称为 Jabber identifier或JID, 一个合法的JID包括一组元素的组合,包括域名(domain identifier)、节点名(node identifier)、资源名(resource identifier)。jid=[node"@"]domain["/"resource]例如格式:user@gmail.com/resource这种格式来标示一个用户.协议规定一个JID的每个组成部分(domain, nod
2011-02-24 17:53:00
2202
原创 core 文件
core 文件作者:张华2006年8月2日 当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。最常出现的,几乎所有C程序员都出现过的错误就是“段错误”了。也是最难查出问题原因的一个错误。下面我们就针对“段错误”来分析core文件的产生、以及我们如何利用core文件找到出现崩溃的地方。 何谓core文件 当一个程序
2006-08-03 09:21:00
1848
转载 在 linux 下修改用户的 limitation, (和用户的登录Shell相关)
在 linux 下修改用户的 limitation, (和用户的登录Shell相关)作者:linux宝库 (http://www.linuxmine.com)来自:linux宝库 (http://www.linuxmine.com)现存:http://www.linuxmine.com/3963.html联系:linuxmine#gmail.com分类:基础知识添加:陈绪 在 Lin
2006-08-01 16:00:00
1418
转载 Linux FAQ 之三——系统设置篇
=================================系统设置相关=================================1.问:GNOME 2.6中,打开“计算机”,里面有软驱、光驱等,双击光驱图标就能挂载并打开光驱,请问对于U盘能不能实现类似功能? 答:对U盘也可以实现类似功能,但是需要事先建立U盘的挂载点: #mkdir /mnt/usb 然后在/etc/fsta
2006-08-01 15:21:00
1040
原创 UNIX系统下的用户限制
UNIX系统下的用户限制摘要本文将讨论在Linux系统中,系统管理员如何对远程用户和本地用户进行限制。限制用户能够进行的操作,能够降低系统遭受内部攻击的的风险。(2002-08-15 15:13:06)By nixe0n 在传统的UNIX系统中,用户的限制是由文件的权限、密码和其它标准的UNIX访问控制完成的。燃而,除此之外还需要更为严格的用户限制,以便能够对用户进行保护以及保护
2006-08-01 15:07:00
2030
原创 非本地跳转--setjmp(3C)和longjmp(3C
4.3非本地跳转--setjmp(3C)和longjmp(3C)setjmp()和longjmp()的使用范围限制在一个线程里,在大多数情况下是合适的。然而,只有setjmp()和longjmp()在同一个线程里,线程才能对一个信号执行longjmp()
2006-06-27 14:54:00
883
原创 宏__THROW
宏__THROW Linux/FreeBSD内核的源文件里常会出现这个东东。其实并不复杂,只是简单的宏定义,可以参考以下代码;:/* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this works on
2006-04-28 14:58:00
3102
1
原创 使用读写锁pthread_rwlock_t未定义的问题
使用读写锁pthread_rwlock_t未定义的问题 今天在程序里使用读写锁包括以下函数:#include int pthread_rwlock_rdlock(pthread_rwlock_t *rwptr);int pthread_rwlock_wrlock(pthread_rwlock_t *rwptr);int pthread_rwlock_unlock(pthread_rwl
2006-04-28 11:46:00
5414
原创 适应不同版本的bdb的代码
使用BDB 前段时间准备将以前程序里的gdbm替换成bdb,所以写了一些代码,如何使用bdb,现在将代码贴出来: #ifndef EYOU_DBT_H #define EYOU_DBT_H #include
2006-04-28 09:31:00
1588
原创 一个通用的Makefile
BIN = prog BIN_DEBUG= prog_debugLIBS:=pthread rtCFLAGS=-g -Wall -O3 -m486CXXFLAGS:=$(CFLAGS)SOURCE:=$(wildcard *.c) $(wildcard *.cc)OBJS:=$(patsubst %.c, %.o, $(patsubst %.cc, %.o, $(SOURCE))) DE
2006-04-28 09:18:00
1089
原创 linux 使用assert
在程序里使用assert断言, 通过gcc编译,执行可以执行。如果要出release版,用gcc 加 -DNDEBUG就可以了,assert就不会执行
2006-04-20 19:20:00
3839
1
原创 POSIX 线程 – pthread_sigmask
POSIX 线程 – pthread_sigmask 在多线程的程序里,希望只在主线程中处理信号,可以使用 函数: int pthread_sigmask (int how, const sigset_t *set, sigset_t *oset) 用作在主调线程里控制信号掩码。 How:SIG_BLOCK: 结果集是当前集合参数集的并
2006-04-12 14:23:00
15046
转载 POSIX 线程详解
developerWorks 中国 > Linux > POSIX 线程详解一种支持内存共享的简捷工具 级别: 初级Daniel Robbins, 总裁/CEO, Gentoo Technologies, Inc.2000 年 7 月 01 日 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段。在本系列中,Daniel Robbins
2006-04-12 12:59:00
2076
转载 radius认证技术
1. AAA和Radius概述 AAA是验证授权和记账Authentication,Authorization,and Accounting 的简称。它是运行于NAS上的客户端程序,它提供了一个用来对验证、授权和记账这三种安全功能进行配置的一致的框架。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何对正
2006-04-12 12:52:00
2211
原创 Pthread_create创建错误
今天到公司查看昨天晚上程序运行的结果, 发现pthread_create返回错误12 (Cannot allocate memory)。原因是主线程里没有调用pthread_join函数或 在线程函数中没有调用pthread_detach(pthread_self());这样线程没有被回收。写程序测试了一下:#include #include #include void *func(void*
2006-04-12 11:27:00
3054
转载 Linux 系统命令精通指南
Linux 系统命令精通指南作者 Sheryl Calish 针对 Linux 初学者的系统命令简介 在 “ Linux 文件命令精通指南 ” 中,我们讨论了利用最基础和最常用 Linux 文件命令所需的基本信息。在本文中,我将对 Linux 系统命令作同样的讨论。 我们在前一篇文章中了解到,在 Linux/UNIX 世界中,一切都被看作文件,包括系统管理命令。单独对于组织而言,我们在
2006-04-11 18:04:00
818
转载 Berkeley DB 概述
Berkeley DB 概述皮东 Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库(database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的存取和管理提供了一组简洁的函数调用API接口。 它是一个经典的C-library模式的toolkit,为程序员
2006-04-04 17:16:00
1287
转载 超强的VI
[ 2005-10-19 14:13:04 | Author: songzi ] 学习Linux无论如何你都要学会一种文本编辑器,来进行各种设定,其中最常用的就是 vi了,同时它也是Unix 上的一款字处理软件。vi界面:黑黑的一片,如果是刚接触你会发现真有点不知所措,无所下手,甚至连怎么退出都不知道,就象我一样,一阵乱按,弄得电脑嘀嘀叫个不停,非气得你发晕不可,不过当你熟悉后,你
2006-04-04 17:10:00
928
转载 vi 的基本用法
Vi IMproved (VIM) 是 Bram Moolenaar 开发的与 UNIX 下的通用文本编辑器 vi 兼容并且更加强大的文本编辑器。它支持语法变色、正规表达式匹配与替换、插入补全、自定义键等等功能,为编辑文本尤其是编写程序提供了极大方便。VIM 可以运行在“任何”操作系统上,包括我们常用的 Windows 和 UNIX/Linux。一旦掌握了 VIM,你就掌握了一项跨平台的利器。
2006-04-04 13:44:00
1284
转载 RPM使用介绍
作者:未知 时间:2005-09-13 22:16 出处:Blog.ChinaUnix.net 责编:chinaitpower 1、查询包安装情况/验证包:rpm -qa /rpm -q package_name; rpm -V package;或 rpm -Vf /etc/inittab; rpm -Va2、查询包本身信息:rpm -qi package_name;3、查询包中内容:
2006-04-04 10:30:00
953
转载 Berkeley DB并发数据存储编程(Concurrent Data Store)
Berkeley DB并发数据存储编程(Concurrent Data Store) 转自 http://blog.sina.com.cn/u/48221e89010002ug 高喊着口号“向杨建大牛学习”,乌焦巴弓贴上翻译的一塌胡涂的Berkeley DB Concurrent Data Store Application。可信度:70%,语句:您凑合着看吧。 在完全
2006-04-03 17:01:00
5685
转载 BerkeleyDB 笔记
作者:佚名 文章来源:不详1. 如果db.open时指定了DB_THREAD标志,则在调用db.get时,Dbt类型的对象(key不必,data必须)必须指定DB_DBT_MALLOC, DB_DBT_REALLOC 或者 DB_DBT_USERMEM flag中的一个,用于给返回的记录值分配空间,否则会get失败,cursor的get方法则没有这个限制,这个问题调了半天。2. 二级索引数
2006-04-03 14:55:00
1989
1
转载 Berkeley DB:开源嵌入式数据库测评报告
Berkeley DB:开源嵌入式数据库测评报告 【2005-04-07 10:44】【】【IT专家网】 像MySQL这类基于C/S结构的关系型数据库系统虽然代表着目前数据库应用的主流,但却并不能满足所有应用场合的需要。有时我们需要的可能只是一个简单的基于磁盘文件的数据库系统。这样不仅可以避免安装庞大的数据库服务器,而且还可以简化数据库应用程序的设计。Berkeley DB正是基于
2006-03-30 11:25:00
1284
转载 嵌入式数据库系统Berkeley DB
嵌入式数据库系统Berkeley DB级别: 初级施聪, 高级程序员、网络设计师2005 年 4 月 01 日 Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。本文是对DB开发的一个入门级指南,重点讨论了DB的核心数据结构和数据访问算法,并通过实际的代码演示如何使用DB。最后有
2006-03-30 11:18:00
1190
转载 个人学习Linux知识总结
1.更改telnet登录慢的问题:cd /etc vi resolv.conf将里面内容清空 2.更改root用户不能直接远程登录问题:cd /etc cd pam.d vi login注释掉这行#auth required pam_securetty.so //该行注释掉 3.挂接USB移动硬盘将移动硬盘挂上。 #df 查看Linux下硬盘盘符mount /dev/
2006-03-29 11:09:00
1123
转载 Linux下怎样启动vncserver(HOWTO - Linux VNCserver)
自己有台FC4(Fedora Core 4)的桌面后免不了要从别的地方登过来于是我就在自己机器上起了个vnc server/etc/rc.d/init.d/vncserver start发现用vncviewer用ip连不了查了些文档才搞明白vi /etc/sysconfig/vncservers让里面有这么两句:VNCSERVERS="2:root"VNCSERVERARGS[2]="-geome
2006-03-29 11:05:00
3815
1
转载 Linux文件处理的几个命令
Linux系统信息存放在文件里,文件与普通的公务文件类似。每个文件都有自己的名字、内容、存放地址及其它一些管理信息,如文件的用户、文件的大小等。 文件可以是一封信、一个通讯录,或者是程序的源语句、程序的数据,甚至可以包括可执行的程序和其它非正文内容。 Linux文件系统具有良好的结构,系统提供了很多文件处理程序。这里主要介绍常用的文件处理命令file 1.作用 file通过探测文件内容判断文件
2006-03-24 17:52:00
1022
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人