请教:UNIX/Linux 的socket 编程,listen() 的作用,以及与accept() 之间的联系?(高手进)
listen() 函数是服务器端监听客户端的最大连接数的。
但是为什么使用accept() 函数可以连接超过listen() 监听的上限呢?
比如我用listen(sockfd, 3); 来监听一个服务器的连接。
可是用accept(); 连接客户端,当超过3个的时候accept() 函数并没返回出错,而正常返回一个文件描述符,这是什么情况啊?这样子来看的话岂不是listen(sockfd, 3); 这个监听函数没起作用了。那还要他干什么呢?
[解决办法]
同意一楼所说:设置的3是连接队列中的可用数。
[解决办法]
可以认为是缓存队列吧, 比如说这个队列大小是3, 连着来了3个连接, 接下来会一个个accept处理掉, 客户端那也不会出现连接错误
如果队列里已经有3个了, 这时候又一个客户端来连接了, 那它直接就会收到连接错误, 服务器端直接拒绝了.
所以连接一点一点慢慢过来, 多少个都没问题的, 别一下来太多, 给队列弄冒了就行.
[解决办法]
这有个原来的帖子,好好看一下
http://bbs.csdn.net/topics/80366037