首页 新闻 会员 周边 捐助

为什么服务端的socket要调用Accept创建新的socket?

0
悬赏园豆:10 [已解决问题] 解决于 2011-12-19 09:14

最近在学习socket时碰到一个问题,有点疑惑,希望高手点拨一下。
在教程上有个简单的示例:服务端和客户端进行简单的通信,首先在服务器端新建一个socket s1,之后调用bind绑定一个本地终结点,然后调用listen监听,接着掉用accept返回新的socket s2来处理接收和发送数据。我有点不明白的是:为什么用“s2来处理接收和发送数据”?为什么不用之前s1来和客户端通信呢?

diguanianzhu的主页 diguanianzhu | 初学一级 | 园豆:116
提问于:2011-12-16 15:01
< >
分享
最佳答案
1

s2 = accept(s1, struct sockaddr *RemoteAddr, socklen_t *RemoteAddrLen);

如果accept成功,那么其返回值s2是由内核自动生成的一个全新的描述字,代表与远端客户端的TCP连接。在使用accept函数时,我们称它的第一个参数s1为监听套接口描述字(由socket()函数创建,随后用作bind和listen的第一个参数的描述字);我们称accept函数的返回值即s2,为已连接套接口描述字。也就是说服务器端用s1与远端的客户端建立连接(如发送3次握手信息),而用s2实现服务器端与客户端的数据传输,因此send和recv时要用到s2这个套接口;而accept函数的第二个和第三个参数记录的是远端的地址结构信息;

希望我解释清楚了,呵呵

收获园豆:8
朝雾之归乡 | 初学一级 |园豆:71 | 2011-12-16 15:41

谢谢

diguanianzhu | 园豆:116 (初学一级) | 2011-12-19 09:14
其他回答(1)
0

吃饭用嘴,拉屎用屁眼。你懂的。

收获园豆:2
陈英俊 | 园豆:207 (菜鸟二级) | 2011-12-16 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册