挖井

类库大魔王的挖井日记

挖一口属于自己的井


遇到的一个网络编程的bug

之前遇到一个bug,一直想不通为什么会出现。具体现象是程序一直尝试去连接一个没打开的端口,过一段时间,可能是几分钟,也可能是几天,那个端口突然被程序自己打开并连上了,然后读到了一些计划外的东西接着断言失败了。我仔细检查过整个程序的代码,有哪些可能会打开一个新的端口,结果没有发现。后来用gdb挂上跑,在listen,bind之类的函数打断点,也没见hit,但bug仍然出现了。

后来在同事的帮助下,发现因为我的程序一直在尝试去连接那个没打开的端口,一旦连不上,会重新再创建一个socket再重复尝试,这时从netstat工具可以看出,每次创建的socket系统会随机分配一个本地的端口,而那个端口号说是随机其实常常是依次递增,刚好我要连的那个没打开的端口也是本地的,于是刚好系统随机分配了那个端口号,结果就出现这种bug了。

本文地址:

https://minidump.info/blog/2014/11/network-programming-bugs/

上一篇

最近的网络开发工作

之前说过,我把一个项目中的程序线程数都尽量减少了,差不多就是一个程序用一个线程来跑一个event loop来服务所有socket,结果这几天发现似乎性能有点跟不上了。用于消息中转的程序使用boost.asio来实现了一个tcp server,当有50个client来连时,就很有可能处理不过来,...…

Job 全文阅读
下一篇

使用Qt实现iOS push notification

先看一遍Apple的官方文档或者网上随便找个入门介绍文章,知道代码主要要做的是在AppDelegate里开头做点初始化工作,然后实现几个函数。Qt对各个平台底层都做了良好的抽象和封装,好在有人做过些相关的研究,可以自己写个AppDelegate替换掉原来的那个。那块代码抄过来后,要注意的是因为...…

Qt 全文阅读