在服务器端,vc6.0,用基于MFC的CAsyncSocket类编程,想在某个客户端断开连接时,得知客户端的具体信息,但是在OnClose()函数调用GetPeerName((SOCKADDR*)&addrClose, &len),函数返回值显示WSAENOTSOCK,为什么呢?
是不是因为此时客户端已经关闭,无法得到已经断开的客户端的地址信息?
那么如果这种方法行不通,如何才能在某个客户端断开时,即时得到其相关信息呢?

解决方案 »

  1.   

    我的所有客户端都是基于同一个类的,当产生OnClose事件时,如何判断是哪一个客户端断开了呢?
      

  2.   

    恩,呵呵,想问一下“在OnClose()函数调用GetPeerName((SOCKADDR*)&addrClose, &len),函数返回值显示WSAENOTSOCK,为什么呢?”这种方法是不是行不通,原因到底是什么呢?是因为此时如果客户端关闭的话,用GetPeerName函数就不行了,是吗?
      

  3.   

    是的,当一个套接字关闭后是无法使用 GetPeerName函数的,至于原因就是实现的方式问题
      

  4.   

    操作系统自身对 tcp 以及 GetPeerName 的实现。
      

  5.   

    如果网线断开的话,还会触发OnClose事件吗?网线断开是不是与客户端关闭有很大区别?
    如果那样的话,如何检测客户端的连接情况呢?