#include "io_internal.h"

int64 io_timeouted() {
  tai6464 now;
  static size_t ptr;
  io_entry* e;
  size_t alen=iarray_length(&io_fds);
  taia_now(&now);
  ++ptr;
  if (ptr>=alen) ptr=0;
  e=iarray_get(&io_fds,ptr);
  if (!e) return -1;
  for (;ptr<alen; ++ptr,++e) {
    if (e->inuse && e->timeout.sec.x && taia_less(&e->timeout,&now)) {
      /* we have a timeout */
      if ((e->canread&&e->wantread) || (e->canwrite&&e->wantwrite))
	continue;	/* don't count it if we can signal something else */
      return ptr;
    }
  }
  ptr=-1;	/* this is for really pathological cases, where more
		   connections come in all the time and so the timeout
		   handling does not trigger initially */
  return -1;
}