最近在学习socket时碰到一个问题,有点疑惑,希望高手点拨一下。
在教程上有个简单的示例:服务端和客户端进行简单的通信,首先在服务器端新建一个socket s1,之后调用bind绑定一个本地终结点,然后调用listen监听,接着掉用accept返回新的socket s2来处理接收和发送数据。我有点不明白的是:为什么用“s2来处理接收和发送数据”?为什么不用之前s1来和客户端通信呢?
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函数的第二个和第三个参数记录的是远端的地址结构信息;
希望我解释清楚了,呵呵
谢谢
吃饭用嘴,拉屎用屁眼。你懂的。