TCP 如何让服务端不再接受新连接?

TrueZq 2003-12-02 10:32:00
如何让服务端不再接受新连接?

也就是服务端如何限制最大客户端连接数?
在服务端收到FD_ACCEPT消息后:
case FD_ACCEPT:
{
我不调用 accept
}
服务端没有再接收连接,这是对的。
但是,客户端成功接收到 FD_CONNECT 消息(并且此时 WSAGetLastError()==0)
也就是说客户端认为连接成功,怎么回事?

难道我要服务端先accept,再closesocket,这岂不是多此一举?

你们是如何解决这个问题的。
...全文
64 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2003-12-02
  • 打赏
  • 举报
回复
不能不调用accept,如果后面连接数降下来的话,会有很多连接堵在队列中。应该是接受连接后再断开。
sharkhuang 2003-12-02
  • 打赏
  • 举报
回复
最大连接数!
farfh 2003-12-02
  • 打赏
  • 举报
回复
closesocket
zoutaiqi 2003-12-02
  • 打赏
  • 举报
回复
对,我觉得应该是这样,先接受,然后判断,再断开。有些FTP服务器就是这样做的,如果FTP设置了人数上限,你连接时就会发现:“Socket连接已经成功...人数达到上限....socket closed!”。
zhaolaoxin 2003-12-02
  • 打赏
  • 举报
回复
listen(最大客户端连接数);
TrueZq 2003-12-02
  • 打赏
  • 举报
回复
看来真的只有 “先接受,再断开”了。
xiaohyy 2003-12-02
  • 打赏
  • 举报
回复
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.
fuxf 2003-12-02
  • 打赏
  • 举报
回复
先listen
再accept
适当时候 closesocket
naile 2003-12-02
  • 打赏
  • 举报
回复
试试用这种方法:现listen然后创建一定量数目的socket(这些socket不是监听socket,而是等待连接的socket),然后用异步方实调用AcceptEx,在overlapped和I/O completion模式下是可用的,在select模式下没用过,不知可否,
曾经的猎狐 2003-12-02
  • 打赏
  • 举报
回复
可以做一全局变量计数,每有一个新连接就加1,有一个退出的就减1,判断变量的值,如果超标就断开后续连接

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧