call this directly if wanted. This can be called multiple times for
one file descriptor to set different iomasks. */
-void silc_schedule_set_listen_fd(int fd, unsigned int iomask)
+void silc_schedule_set_listen_fd(int fd, uint32 iomask)
{
assert(schedule.valid != FALSE);
assert(fd < schedule.fd_list.max_fd);
/* Calculate the next timeout for select() */ \
queue->timeout.tv_sec = task->timeout.tv_sec - curtime.tv_sec; \
queue->timeout.tv_usec = task->timeout.tv_usec - curtime.tv_usec; \
+ if (queue->timeout.tv_sec < 0) \
+ queue->timeout.tv_sec = 0; \
\
/* We wouldn't want to go under zero, check for it. */ \
if (queue->timeout.tv_usec < 0) { \
queue->timeout.tv_sec -= 1; \
+ if (queue->timeout.tv_sec < 0) \
+ queue->timeout.tv_sec = 0; \
queue->timeout.tv_usec += 1000000L; \
} \
} \
/* Error */
if (errno == EINTR)
break;
+#if 1
+ if (errno == EINVAL && schedule.timeout) {
+ SILC_LOG_ERROR(("Invalid argument (invalid timeout): %lu %lu",
+ schedule.timeout->tv_sec, schedule.timeout->tv_usec));
+ }
+#endif
SILC_LOG_ERROR(("Error in select(): %s", strerror(errno)));
break;
case 0: