Exemplo n.º 1
0
int api_tcp_close(api_tcp_listener_t* listener)
{
    closesocket(listener->fd);
    listener->status.closed = 1;

    if (listener->loop != 0)
    {
        api_loop_unref(listener->loop);
        listener->loop = 0;
    }

    return API__OK;
}
Exemplo n.º 2
0
int api_tcp_close(api_tcp_listener_t* listener)
{
    int error;

    error = epoll_ctl(listener->loop->epoll, EPOLL_CTL_DEL, listener->fd,
                        &listener->os_linux.e);

    close(listener->fd);
    listener->status.closed = 1;

    if (listener->loop != 0)
    {
        api_loop_unref(listener->loop);
        listener->loop = 0;
    }

    return api_error_translate(error);
}
Exemplo n.º 3
0
int api_stream_close(api_stream_t* stream)
{
    int error = 0;

    if (stream->type == STREAM_File)
    {
        stream->status.closed = 1;
        close(stream->fd);
    }
    else
    {
        error = epoll_ctl(stream->loop->epoll, EPOLL_CTL_DEL, stream->fd,
                        &stream->os_linux.e);
        if (error == 0)
        {
            stream->status.closed = 1;
            close(stream->fd);
        }
    }

    stream->filter_head->on_closed(stream->filter_head);

    if (stream->unread.length > 0) 
    {
        api_free(api_pool_default(stream->loop), stream->unread.length,
                    stream->unread.buffer);
        stream->unread.length = 0;
    }

    if (stream->loop != 0)
    {
        api_loop_unref(stream->loop);
        stream->loop = 0;
        return API__OK;
    }

    return api_error_translate(errno);
}