listen的原型
int listen(
SOCKET s,
int backlog
);
对backlog的说明:
[in] Maximum length of the queue of pending connections. If set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value. 应该是可以设定接入连接数的。我用下面的代码还是可以接入。
把backlog设成1,接进多少台都没问题。请问我哪里设的有问题吗?谢谢。 if (SOCKET_ERROR == listen (s, 0))
{
printf ("Listen failed: %u\n", GetLastError ());
closesocket(s) ;
return(FALSE);
}
else
{
printf("Listening ! \n");
}
int listen(
SOCKET s,
int backlog
);
对backlog的说明:
[in] Maximum length of the queue of pending connections. If set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value. 应该是可以设定接入连接数的。我用下面的代码还是可以接入。
把backlog设成1,接进多少台都没问题。请问我哪里设的有问题吗?谢谢。 if (SOCKET_ERROR == listen (s, 0))
{
printf ("Listen failed: %u\n", GetLastError ());
closesocket(s) ;
return(FALSE);
}
else
{
printf("Listening ! \n");
}
解决方案 »
- Rgn画图例中不规则图形//哪里错了?
- 调用MFC静态DLL中引用参数出错!一经解决,立即结贴!
- 同一台机器上,用winpcap连续两次取得的网卡列表不同
- MSFGrid 控件 成员函数及属性 介绍?!!?
- 如何在CDialog上使用CDialogBar
- [菜鸟问题]Cstring类型 在dll项目编译中为什么提示undeclare identifier?
- 如何移动控件的显示位置
- 请问有人做过自动测试程序吗?
- 调用DLL时出现错误(内详)
- 请问:怎样实现象金山词霸那样,点最小化以后,缩到任务栏,然后消失?
- VC6自己的about对话框里的那些横线是怎么画出来的?
- CSDN有没有象大富翁一样的离线数据库或CHM文档啊?有给个网址我下下
1)backlog 用于在TCP层接收链接的缓冲池的最大个数,这个个数可在应用层中的listen函数里设置,当客户链接请求大于这个个数(缓冲池满),其它的未进入链接缓冲池的客户端在tcp层上tcp模块会自动重新链接,直到超时(大约57秒后)
2)我们的应用层的链接完成是要从tcp层的链接缓冲池中移出一个(accept函数实现)
1.在WinSock1.1中最大值5。如果backlog小于1,则backlog被置喂1;若backlog大于SOMAXCONN(定义在winsock.h中,值为5),则backlog被置为SOMAXCONN。
2.在WinSock2中,没有制定具体值,它由服务提供者决定
3.有时候backlog设置很小,这时我们接进多少台机器都没问题是因为服务器机器处理速度很快队列来不及填满就处理完了,而且在同一个时刻到来的连接还是很少的
我做的实验是,backlog设为1时,在另一台机子同时开若干个连接tcp同时保持连接状态(connecting),还是可以继续链入。
实际上我是想用它来设定本server的connection数。
是不是应该用别的来做?
如果想限制本server的连接数,我通常的做法是在Server收到连接请求的时候,做个计数值成功连接则增加一,当连接断开的时候就减一。在这之前自己可以设置一个宏指定连接数的最大值,每次收到连接时判断计数值是否超过设置的宏值(最大连接数)。超过了则发给客户端消息告诉他已经超过Server的最大连接数,然后closesocket()关闭刚建立的连接就可以了。
宏就是server限制的connection数。