From 53bcf195b0505bb3e98d7f058005a7069719569a Mon Sep 17 00:00:00 2001 From: Dmitry Simonenko Date: Thu, 13 Apr 2017 21:10:42 +0300 Subject: [PATCH] machinarium: support machine_accept() timeout --- src/machinarium.h | 4 ++-- src/mm_accept.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/machinarium.h b/src/machinarium.h index d06a9160..7ed1af21 100644 --- a/src/machinarium.h +++ b/src/machinarium.h @@ -161,8 +161,8 @@ machine_connected(machine_io_t); MACHINE_API int machine_bind(machine_io_t, struct sockaddr*); -MACHINE_API int -machine_accept(machine_io_t, int backlog, machine_io_t *client); +MACHINE_API machine_io_t +machine_accept(machine_io_t, int backlog, uint64_t time_ms); MACHINE_API int machine_read(machine_io_t, char *buf, int size, uint64_t time_ms); diff --git a/src/mm_accept.c b/src/mm_accept.c index 21143ca5..54b9b330 100644 --- a/src/mm_accept.c +++ b/src/mm_accept.c @@ -37,7 +37,7 @@ mm_accept_on_read_cb(mm_fd_t *handle) } static int -mm_accept(mm_io_t *io, int backlog, machine_io_t *client) +mm_accept(mm_io_t *io, int backlog, machine_io_t *client, uint64_t time_ms) { mm_t *machine = machine = io->machine; mm_fiber_t *current = mm_scheduler_current(&io->machine->scheduler); @@ -82,7 +82,7 @@ mm_accept(mm_io_t *io, int backlog, machine_io_t *client) /* wait for timedout, cancel or execution status */ mm_timer_start(&machine->loop.clock, &io->accept_timer, - mm_accept_timer_cb, io, 0); + mm_accept_timer_cb, io, time_ms); mm_call_begin(¤t->call, mm_accept_cancel_cb, io); io->accept_fiber = current; mm_scheduler_yield(&machine->scheduler); @@ -121,14 +121,16 @@ mm_accept(mm_io_t *io, int backlog, machine_io_t *client) return 0; } -MACHINE_API int -machine_accept(machine_io_t obj, int backlog, machine_io_t *client) +MACHINE_API machine_io_t +machine_accept(machine_io_t obj, int backlog, uint64_t time_ms) { mm_io_t *io = obj; + machine_io_t client = NULL; int rc; - rc = mm_accept(io, backlog, client); + rc = mm_accept(io, backlog, &client, time_ms); if (rc == -1) - return -1; + return NULL; + return client; #if 0 if (! io->tls_obj) return 0;