网络编程中listen()是否在调用后就一直监听,即使接受了其中一个连接,依然监听其他套接字
listen()的寿命多长,即假如listen()是主线程最后代码,有其他线程处理accept和recv,那该进程是一直监听下去吗(并不是阻塞,而是像未完成代码一样让主线...
listen()的寿命多长,即假如listen()是主线程最后代码,有其他线程处理accept和recv,那该进程是一直监听下去吗(并不是阻塞,而是像未完成代码一样让主线程无法结束),还是监听到一个连接并在子线程完成就过了listen()结束主线程
.求各位大神解惑啊 展开
.求各位大神解惑啊 展开
2个回答
展开全部
listen函数的第一个参数是SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,那就需要用accept函数去进行检查了,accept函数的第一个参数也是SOCKET类型,跟listen函数是同一个socket句柄,所以一般accept都是放在一个线程中不停的调用,因为你不知道什么时候会有客户连接进行来。
更多追问追答
追问
那为什么书上说aceept()函数返回一个新的套接字来接受数据,原来的套接字继续监听
追答
书上说的没错,你这样理解吧listen的socket对象你把它理解成火车站,aceept的socket对象你把他理解成你要接的旅客。你要接到旅客,首先你要到火车站去等待(即listen的socket对象),旅客有没有到,你要不停的在出口处查看有没有你等待的旅客(即aceept在检查到新连接产生的socket对象),接到旅客后你想对旅客说我爱你,这时你应该对旅客(aceept在检查到新连接产生的socket对象)说,而不是对火车站(listen的socket对象)说。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询