引用Richard Stevens UNP中的一段话:
重点部分翻译下:
1,创建好的socket相当于一部电话机。
2,bind相当于告诉别人你的电话号码(其实我觉得更像是去电信公司开户)。
3,listen相当于打开电话的响铃,这样人家来电话我才能听到。
4,connect相当于对方知道的我电话号码并向我打电话。
5,accept相当于我看到有人打电话过来,我拿起电话机,准备跟人家聊天。
6,DNS相当于号码薄,可以通过号码薄来根据人名查找电话号码(其实我觉得是DNS+使用的协议)。
Stevens这里还特别说明了socket api跟现实中电话不同的一点是,在socket模型中,accept返回之前我们是没法知道,而打电话时,在没有接听之前我是能看到对方的电话号码的,之后再选择是不是要接听。
所以我觉得
@姚冬大叔关于电话的类比还是比较靠谱的,很多人反对可能是因为不太清楚“listen是随时准备接电话”的这个说明,其实跟Stevens大神的打开响铃是一样的意思啊。listen字面意思也就是,我洗干净耳朵听着呢。