读书人

想彻底搞清楚关于accpet()的有关问题

发布时间: 2012-01-12 22:11:58 作者: rapoo

想彻底搞清楚关于accpet()的问题
我在书上看到,自己程序里面也是这么写的

服务端
CSocket svr,sock;
while(1)
{
svr.accpet(sock); <-------- 我始终有点不清晰就是死循环每次重复执行这句........... 的时候都是一个什么过程,只知道accpet()是个阻塞函数
......

.....
}

[解决办法]
accept堵塞等待,返回的时候,会给你一个新的socket,对应连接上来的客户端,至于你用这个socket做什么,发送接收,甚至直接继续accept,都无所谓,当然如果你得到一个客户端连接的socket进行收发,如果send ,recv本身就被设置堵塞的,那么你的accept就会很受影响,
通常做法
要么得到socket,就投递一个线程处理收发,原循环不需要等待直接继续accept。

要么就是采用非堵塞的模型,处理accept之后的收发。反正对循环不会造成影响

从逻辑来说,每次accept返回的socket都是独立的新客户端连接,在这个连接上的数据收发也是独立的

你所说的收一次数据就建立一次连接,属于短连接形式。取决于C/S的信息协议如何定义。
[解决办法]
这是因为你没有仔细看,listen是监听的意思,而Accept是 接受连接的意思

listen 是表示要开始监听,并且设定最大阻塞个数

而Accept就是接受 客户端的 connect连接

因为是不同的客户进行连接,当然是不同的亚

读书人网 >VC/MFC

热点推荐