+ timeout->cb = cb;
+ timeout->data = data;
+ timeout->node.data = timeout;
+
+ timeout_set(timeout, tv);
+}
+
+void timeout_set(timeout_t *timeout, struct timeval *tv) {
+ if(timeout->tv.tv_sec)
+ splay_unlink_node(&timeout_tree, &timeout->node);
+
+ if(!now.tv_sec)
+ gettimeofday(&now, NULL);
+
+ timeradd(&now, tv, &timeout->tv);
+
+ splay_insert_node(&timeout_tree, &timeout->node);
+}
+
+void timeout_del(timeout_t *timeout) {
+ if(!timeout->cb)