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; }
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); }
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); }