odyssey/src/mm_close.c

34 lines
589 B
C
Raw Normal View History

/*
* machinarium.
*
* cooperative multitasking engine.
*/
#include <machinarium.h>
#include <machinarium_private.h>
MACHINE_API int
machine_close(machine_io_t obj)
{
mm_io_t *io = obj;
mm_machine_t *machine = mm_self;
if (io->fd == -1) {
mm_io_set_errno(io, EBADF);
return -1;
}
int rc;
rc = mm_loop_delete(&machine->loop, &io->handle);
if (rc == -1)
mm_io_set_errno(io, errno);
rc = close(io->fd);
if (rc == -1)
mm_io_set_errno(io, errno);
io->connected = 0;
io->fd = -1;
io->handle.fd = -1;
2017-04-12 12:19:30 +00:00
io->handle.on_read = NULL;
io->handle.on_write = NULL;
return 0;
}