近日,在XP下使用Python编写了一个需要大量使用TCP链接的程序,程序运行一会儿之后,不断地返回编号10048的系统错误,显示“需要绑定的网络地址/端口已经存在”。
搜索之后发现,这个10048应该是属于Windows系统层面的错误,是在同一地址和端口上绑定socket引起的。一开始以为是没有关闭socket而导致端口耗尽所造成的重用,但是增加了socket关闭的语句之后,错误依然存在。
用netstat深入检查了一下发现,出现10048错误时,有连续的大量端口处于TIME_WAIT状态,这便是10048错误的来源。一个socket即使进行了关闭操作,也会有一段时间处于TIME_WAIT状态,这时如果将另外一个socket绑定到这个端口上,就会出现10048错误。
而在Python中使用socket,Python解释器似乎只会使用某段范围的端口对socket进行绑定,当程序快速地大量创建、关闭socket时,使得这个范围段的端口都处于TIME_WAIT状态,这时弱在创建并使用新的socket,解释器又在这个范围段绑定端口,便会出现10048错误。之前那个程序出错原因便是如此。
在socket网络编程中,本来是有个socket选项可以解决这个问题的,那就是SO_REUSEADDR选项,它允许多个socket绑定在同一个端口上。但是在程序中对每个socket都设置了SO_REUSEADDR选项后,问题还是没有解决。
于是继续Google相关的资料,最后发现这是Python在Windows平台上的一个bug,导致SO_REUSEADDR选项虽然设置了,却没有真正起作用。
在Python官方的Issue Tracker中,这个bug的标题是“SO_REUSEADDR doesn’t have the same semantics on Windows as on Unix”,受影响的版本包括了Python 2.5、Python 2.6和Python 3.0,这个问题目前还没有得解决。
更多的资料请参考官方的Issue Tracker记录,http://bugs.python.org/issue2550
编程开发 Python
在互联网业界,Google超强的技术实力是得到了公认的,在许多技术人员的心里,Google是有着很神圣的地位的。
当然,Google也以开源等方式为互联网技术领域做了回馈和贡献。在Google Code上,Google发布了许多代码项目,包括众多服务的API,甚至是Google内部使用的一些工具和框架。
在这其中,还包括了一个“Google编程学院(Google Code University)”,这是面向计算机学科的学生和教育工作者的一个项目。这个项目提供了一些教程和示例,目的是让学生和教育工作者可以学习到更多目前使用的计算技术和范例。
Google编程学院的首页有简单的中文介绍,但课程内容目前都是英文的,主要包括以下几个方面:
- AJAX 编程
- 算法
- 分布式系统
- Web安全
- 编程语言
课程的形式也是多样的,包括简洁的入门介绍、例子、视频和一些来自名校的网上课程。
除此之外,还有
这样的栏目。可见Google编程学院并不是要从无到有去简历一系列的CS课程,而是对已有的资源加以聚合,并向学生指明了解计算机科学的方向和路径。
有心在互联网技术、计算机科学方向发展的朋友,特别是刚入门的朋友,可不要错过这样的好资源喔,当然前提是你的英语要足够好。
Google专栏 Google, 编程
近日,在《解放日报》的百科连线栏目中,有提问者问到了“卧槽”是怎么回事。从提问的原意来看,“卧槽”应该是与“跳槽”相对应的意思。
搞笑的是,解答者(华东理工大学社会与公共管理学院博士段凡)在解释的时候,居然煞有介事地引经据典,把网路上流传的恶搞典故“卧槽泥马”给用起来。而事实上所谓的“卧槽泥马”只是网友根据某句粗话的谐音生造出来的伪成语,而所谓的出自《战国策》的典故,也是网友为了配合这句伪成语的出现而杜撰的。
没想到,一个堂堂的文科博士,居然就这样被忽悠过去了,而这错误还一路溜过了解放日报记者、编辑的眼皮,居然就登出来了。这些同志的文学素养实在有待提高,又或者说他们跟网络潮流有点脱节了,也有点太过于相信网络上资料的真实性的。对此的思考可见袁祺的文章《由被“卧槽泥马”忽悠所想到》。
以下是报纸的截图,还有《解放日报》的电子版,不过估计很快就会被河蟹了。

杂闻趣事
俗话说,天气预报,胡说八道。虽然话说得有点偏激,但确实很好地反映了我们日常生活中所见到的天气预报的现状。
相信大家都会有这样的感受,不管是电视台的天气预报,还是手机收到的天气预报,又或者是在Google、Yahoo等网站看到的天气预报,经常都是很不靠谱的。甚至是中央气象台或者各地气象台网站上的天气预报,有时也不太靠谱。
天气是个复杂多变的系统,要准确预报确实有难度,我们日常生活要求的预报精度其是不是很高,但就这样的需求依然经常得不到满足。
不过在几年前,我倒是在网上碰到了一个比较靠谱的天气预报网站,它就是天气在线,网址是 http://www.t7online.com/。
这网站的背景不是很清楚,但是天气预报的准确程度确实比较高,我这几年来一直都看它的天气预报,并且一次又一次地见证了其他渠道天气预报的不靠谱。据网站上介绍,它是收集了多个来源的气象预报资料,并以独特的算法综合分析得出的预报结果。
这个网站的优点是预报相对准确,世界各地的预报都有,国内的预报可以具体到小县城。缺点是网站页面的广告比较多,需要用用插件屏蔽一下,还有就是七天以上的长期预报属于收费的会员服务,对于普通用户来说,3天的预报已经足够了,长期的预报还是不太靠谱的。
推荐大家试用一下,感觉是不是比其他的更靠谱可以向我反馈下,又或者你觉得有更好的也可以推荐下。
地址 http://www.t7online.com/
互联网资源 推荐
运行一个来历不明的程序时,你是不是担心它会破坏你的系统呢?
有些软件你是不是想只运行一次,但又不想安装它们,以免在系统里留下垃圾,使系统越来越庞大呢?
有了SandBoxie,上面的问题就都可以解决了。
SandBoxie翻译过来可以叫沙箱,顾名思义它就像是一个箱子,可以让程序在系统中运行,但是又和系统是隔离开来的。
在沙箱中运行的程序,其实是运行在一个小小的虚拟环境中,它可以调用系统的功能,但它所产生的进程、所生成的文件、所做的修改都不会影响当前的系统,而是会被另外保存、记录下来,可以很方便地看到程序的所作所为。不过既然是在虚拟环境中运行,在执行效率上还是要比直接运行要慢一些的。


如果程序所做的这些修改是符合你需要的,你可以把沙箱中的内容恢复到你当前的系统中,就好像之前的运行是在系统中直接执行的一样。如果你不需要这个程序和这些修改,你可以把整个沙箱的内容直接删除,不会留下任何垃圾。
所以,不管是用来检查来历不明的程序,还是用来尝试新的软件工具,又或者安装一些只需要运行一次的程序,SandBoxie都是很方便的,可以保证你系统的安全,让你的系统不会留下越来越多的垃圾。
软件应用 推荐
最新评论