百科问答小站 logo
百科问答小站 font logo



关于Socket API的设计? 第1页

  

user avatar   clpsz 网友的相关建议: 
      

引用Richard Stevens UNP中的一段话:

重点部分翻译下:

1,创建好的socket相当于一部电话机。

2,bind相当于告诉别人你的电话号码(其实我觉得更像是去电信公司开户)。

3,listen相当于打开电话的响铃,这样人家来电话我才能听到。

4,connect相当于对方知道的我电话号码并向我打电话。

5,accept相当于我看到有人打电话过来,我拿起电话机,准备跟人家聊天。

6,DNS相当于号码薄,可以通过号码薄来根据人名查找电话号码(其实我觉得是DNS+使用的协议)。

Stevens这里还特别说明了socket api跟现实中电话不同的一点是,在socket模型中,accept返回之前我们是没法知道,而打电话时,在没有接听之前我是能看到对方的电话号码的,之后再选择是不是要接听。

所以我觉得

@姚冬

大叔关于电话的类比还是比较靠谱的,很多人反对可能是因为不太清楚“listen是随时准备接电话”的这个说明,其实跟Stevens大神的打开响铃是一样的意思啊。listen字面意思也就是,我洗干净耳朵听着呢。




  

相关话题

  linux在系统调用进入内核时,为什么要将参数从用户空间拷贝到内核空间?不能直接访问,或是使用memcpy吗?非要使用copy_from_user才行吗? 
  从操作系统内存管理来说,malloc申请一块内存的背后原理是什么? 
  能否给Nokia手机直接编程? 
  两种开放态度,为什么桌面端 Windows/Linux 的口碑与移动端 iOS/Android 相反? 
  Linux 下 “一切皆文件” 思想的本质和好处在哪里?与 Windows 下的文件管理思想有啥差别? 
  如何评价Linux发布新的CoC (Code of Conduct) 后引发的部分开源社区的不满? 
  为什么显卡在内存中的映射是0b8000H? 
  为什么Linux用户用sudo命令而不直接使用root用户? 
  如何扎实系统地学好后端开发(Linux 环境下)?细分方向有哪些?可否推荐一些好的开源项目? 
  如何评价UOS统一操作系统? 

前一个讨论
你玩过的最丧心病狂的游戏是什么?
下一个讨论
如果知乎是一所大学,校训是什么最好?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利