• 趣事记录 | 有哪些让你目瞪口呆的 Bug ?


    在知乎上看到一个有趣的 Bug 事件,转载记录一下。

    原回答地址:Here

    发生于麻省理工的一个有意思的bug:只能发500英里的邮件

    原文在此:http://web.mit.edu/jemorris/humor/500-miles

    相当Nerd的bug,有兴趣的人看看吧。
    大意是,当年麻省的一名系统管理员,忽然收到统计系主任打来的求助电话“咱们的邮件发不了 (500) 英里以外的地方,其实,是 (520) 英里更准确点”。

    系统管理员心里¥!&……*&。
    不过在他开始用自己的邮件测试后,发现邮件的确只能发往 (520)​ 英里以内,其余的收件地点一律失败。

    于是在他一片纠结中他渐渐开始发现问题,邮件服务器被人更新过操作系统(当年还是SunOS),但是由于操作系统的发行版往往配备了旧版软件,于是在更新操作系统的时候邮件软件反而被降级了(Sendmail 8 -> Sendmail 5)。
    于是进一步调查发现,在更新操作系统时,管理员自己编写的Sendmail配置文件(sendmail.cf)被保留了下来。这样就出现了这种状况:Sendmail 5尝试解析Sendmail 8的配置文件。

    但是为什么会是 (500) miles呢?为什么是 (500) miles咧?

    原因是这样的,Sendmail 5面对陌生的配置文件,凡是不理解的部分都会忽略,凡是没设置过的配置项自动设置成0。这样其中有一个被设置成0,这一项就是 (连接远端SMTP服务器的超时时间)timeout to connect to the remote SMTP server。后来经过实验,发现(0)秒的timeout会导致Sendmail在 (3) 毫秒后中断连接。

    所以,为啥是 (500) miles?

    在当年,MIT的校园网是没有那么多router的,也就没那么多网络延迟,所以连接一个远端主机的时间大概就是光所需的时间。于是3毫秒, 就意味着:

    [0.003 * 3 * 10^{8} * 0.001 * 0.621=558.9000000000001 ]

    (558) 英里。也就是 (558) 英里以外的服务器,都无法连接到,而 (558) 英里以内的服务器,都可以正常通信。
    当当当,这就是 (500) 英里的bug啦。

    The desire of his soul is the prophecy of his fate
    你灵魂的欲望,是你命运的先知。

  • 相关阅读:
    红黑树——面试相关
    汇编常用指令
    c++11 delete禁用函数
    【转】C++可变参数列表处理宏va_list、va_start、va_end的使用
    【转】C/C++函数调用过程分析
    引用的大小
    多线程面试
    2017.08.22网易面试问题记录
    c++ 重载->
    探究Java如何实现原子操作(atomic operation)
  • 原文地址:https://www.cnblogs.com/RioTian/p/15397058.html
Copyright © 2020-2023  润新知