C++
文章平均质量分 75
yanghehong
这个作者很懒,什么都没留下…
展开
-
引用(Reference)和指针的区别
引用(Reference)和指针到底有什么区别呢?先写几行C++代码,看看它们生成的汇编。pointer.ccvoid simpleFun(int* a_p){ *a_p = 7;} 其生成的汇编:_Z9simpleFunPi:.LFB2: pushl %ebp.LCFI0: movl %esp, %ebp.LCFI1: movl 8(%ebp), %eax m原创 2008-06-10 12:53:00 · 1076 阅读 · 0 评论 -
Gtalk Jingle (1) - TURN relay server
看了一下google放出来的libjingle-0.4.0源代码中的relay server部分。基本原理是要有个public的Relay Server,Relay Server要可以分配Replayed Transport Address,倒是如TURN draft-ietf-behave-turn-09描述的那样。但有挺多不同和简化。当然了,这个东西私有的,不存在互通的问题。 TUR原创 2008-09-19 18:54:00 · 5504 阅读 · 2 评论 -
Gtalk Jingle (3) signal/slot机制的应用
libjingle中大量使用signal/slot机制 (采用的是Sarah Thompson写的sigslot程序库)。 sigslot将原来直接调用的函数在一定程度上分离,然后在程序运行过程中随意粘合(connect)或分离(disconnect)它们的调用关系。这样它们分离得比较松,不过还有一定程度的耦合,比如signal和slot的参数类型和个数要一致。 比如RelaySe原创 2008-09-25 21:14:00 · 1559 阅读 · 0 评论 -
初遇缓冲区溢出攻击
初遇缓冲区溢出(Stack Buffer Overflow)攻击那天晚上,某种业务有好几个服务端进程在短时间内崩溃了。同事上去看了,发现都是在处理来自同一个地方东莞的同一个IP地址过来的请求时发生core dump。恩,诡异,当时我们先跟运维同事联系,在该业务的几个服务器上 临时紧急禁掉该IP的连接。我也上去看了,用GDB查看core文件。看了trace原创 2011-10-23 13:11:39 · 3026 阅读 · 2 评论 -
初始化惹的祸
我们某种业务,客户端获取服务端数据,有重试机制。其中重试的timer原定是可配置的,就是服务端改了数值,客户端与服务端交互消息之后就起效。客户端版本发布之后,发现客户端一直按默认值执行,更改timer的配置无效。同事debug后,发现消息在从服务端发出去之前就不对了。获取配置后给消息赋值时打出来的timer的数值是正确的,序列化后再发送出去之前再打出来就不对了。代码逻辑看起来完全正确...原创 2011-09-26 22:52:02 · 2045 阅读 · 0 评论 -
临时优化了一下可靠UDP程序
之前做的一个简单的可靠UDP传输,基本的可靠是实现了,但没做动态的流控。当时为了简单,也为了快速实现。当然 运算简单服务器也能撑起更多用户,比如一个服务端单线程进程可能撑起上万的用户连接。几个数据量小的业务,跑了几个月并没发现什么明显问题。后来迁移一个业务过去,灰度测试,客户端获取一份数据的速度很慢,比原来使用TCP的慢多了。对比之后发现用来使用TCP传的时候,这份业务数据有做压缩,迁原创 2012-01-15 13:10:03 · 3671 阅读 · 8 评论 -
遭遇多线程bug (1)
某些用户,机器重启后,到第三方服务器的连接起不来,而到我们自己服务器的连接就没事。如果连接由于网络或其他原因fail掉,过一定时间后应该会重新尝试建立连接的。测试组做初步调查,他们能在本地环境复现,只是不是稳定复现,时而有时而没有。(嗯,race condition的问题就常常比较飘忽不定,并且往往在系统繁忙负载高的时候爆发)。我开始参与。原创 2013-12-13 08:12:43 · 2183 阅读 · 2 评论