Example #1
0
static int swClient_close(swClient *cli)
{
    int fd = cli->socket->fd;
    int ret;

#ifdef SW_USE_OPENSSL
    if (cli->open_ssl && cli->ssl_context)
    {
        if (cli->socket->ssl)
        {
            swSSL_close(cli->socket);
        }
        swSSL_free_context(cli->ssl_context);
        if (cli->ssl_cert_file)
        {
            free(cli->ssl_cert_file);
        }
        if (cli->ssl_key_file)
        {
            free(cli->ssl_key_file);
        }
    }
#endif

    //clear buffer
    if (cli->buffer)
    {
        swString_free(cli->buffer);
        cli->buffer = NULL;
    }

    if (cli->async)
    {
        //remove from reactor
        SwooleG.main_reactor->del(SwooleG.main_reactor, fd);
        cli->socket->closed = 1;
        //onClose callback
        if (cli->socket->active && cli->onClose)
        {
            cli->onClose(cli);
        }
        ret = swReactor_close(SwooleG.main_reactor, fd);
    }
    else
    {
        bzero(cli->socket, sizeof(swConnection));
        ret = close(fd);
    }

    cli->closed = 1;

    if (cli->type == SW_SOCK_UNIX_DGRAM)
    {
        unlink(cli->socket->info.addr.un.sun_path);
    }

    return ret;
}
Example #2
0
static int swClient_close(swClient *cli)
{
    int fd = cli->socket->fd;
    int ret;

    if (cli->async)
    {
        ret = swReactor_close(SwooleG.main_reactor, fd);
    }
    else
    {
        bzero(cli->socket, sizeof(swConnection));
        ret = close(fd);
    }

    if (cli->type == SW_SOCK_UNIX_DGRAM)
    {
        unlink(cli->client_addr.addr.un.sun_path);
    }

    return ret;
}