当前位置:  开发笔记 > 编程语言 > 正文

套接字编程 - listen()和accept()之间有什么区别?

如何解决《套接字编程-listen()和accept()之间有什么区别?》经验,为你挑选了2个好方法。

我一直在阅读本教程以了解套接字编程.似乎listen()accept()系统调用都做同样的事情,即阻塞并等待客户端连接到使用socket()系统调用创建的套接字.为什么你需要两个单独的步骤呢?为什么不只使用一个系统调用?

顺便说一句,我搜索了这个问题,发现了类似的问题,但没有一个答案令人满意.例如,其中一个人说accept()创建套接字是没有意义的,因为我知道套接字是由创建的socket().



1> SergeyA..:

这是历史建筑的一部分.listen为下次accept通话准备套接字.Listen还允许人们设置积压 - 系统将接受的连接数,而不是让你的程序真正接受它们.积压完成之后的所有内容都会被系统立即拒绝.listen永远不会阻塞,同时accept阻塞(除非套接字处于非阻塞模式),直到下一个连接出现.显然,这不一定是两个独立的功能 - 可以想象accept()功能可以做到一切listen.



2> Some program..:

listen()函数基本上在内部套接字结构中设置一个标志,将套接字标记为被动侦听套接字,您可以调用该套接字accept.它打开绑定端口,以便套接字可以开始接收来自客户端的连接.

accept()函数要求侦听套接字接受下一个传入连接并返回该连接的套接字描述符.因此,从某种意义上说, accept() 确实创建了一个套接字,而不是listen()用于传入连接的套接字.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有