int  mysend( SOCKET s, const char *buf, int len, int flags )
{
已经知道 这个socket是 s 如何安全的 断开 他的连接?
我用了closesocekt 好象断开不了连接 要么就是程序 卡死了
}或者有什么方法 能直接让 我的进程里的连接断开?

解决方案 »

  1.   

    close 是关闭进程中的socket句柄,如果socket已经没有其它进程占用了,就会断开socket连接, 
          
    shutdown 会把系统中的socket对象关掉,
              不过此时最好close一下, 因为shutdown只是关掉内核层的socket,进程中应该还保存了 
              句柄
      

  2.   

    可以的话,可以这样做:
    1.硬关闭
    不管缓冲中是不是还有数据发送中或数据已被接收在缓冲区中,直接关闭
    struct linger Lin;
    Lin.l_onoff = 0;
    Lin.l_linger = 0;
    setsockopt(TheSocket, SOL_SOCKET, SO_LINGER, (char *)&Lin,sizeof(Lin));
    shutdown(TheSocket,SD_BOTH);
    closesocket(TheSocket);2.完美关闭
    1.先检查缓冲区是否有数据在发送或已被接收,如果有,先完成发送或发收
    2.缓冲区都没数据时,使用shutdown()
    3.closesocket()
      

  3.   

    无论是阻塞还是非阻塞
    你调用closesocket都可以立即释放SOCKET资源而不会等待
    这其中的SOCKET缓冲是有操作系统负责继续发送或者立即丢弃的
    也就是closesocket不会导致阻塞如果你发现调用closesocket导致了你的程序出现阻塞,也就是卡死
    那基本是你的代码的问题,而不是closesocket函数的问题
    检查closesocket调用后运行前后的TRACE,一般可以发现问题所在了强调一遍,closesocket不会导致阻塞