询问在CAsyncSocket中如果在OnAccept()事件中不调用accept()接受客户端连接,而是直接调用CAsyncSocket::Onaccept()是不是就可以拒绝这个客户的连接请求,并且不会阻塞下一个客户的连接请求?请指教。
进一步,能不能在不accept的情况下根据对方IP拒绝对方的connect?

解决方案 »

  1.   

    俺的程序里因为是预先留了1000个CAsyncSocket做处理,但担心有客户程序一次起上千个线程来连接导致不能服务其它客户程序,因此想判定是不是来自同一个IP,现在我的处理中是记录了当前的所有连接IP,accept后发现是已经有的IP就断开。问题是:俺没有有办法在对方connect过来时就断开它呢?请指教。
      

  2.   

    accept后发现是已经有的IP就断开是connect过来时就断开它的正确做法。在OnAccept里面不用accept表示对方的连接请求保留在队列中。而一个listen的socket最多在队列中预留5个连接请求。
      

  3.   

    缺省的CAsyncSocket::OnAccept()没有把连接请求取走吗?我看MSDN总是只说在这里调用accept(),却总是不说不调的话会发生什么。
      

  4.   

    CAsyncSocket::OnAccept只是响应消息。MSDN中说的很明白,listen的时候有一个缓存连接数目的,在accept的时候才会减少缓存中的socket,到了这个缓存数目之后的所有连接请求都无法响应。