ISNODE(Conn);
int fd; /* may be 0, meaning closed (during construction/destruction) */
oop_read *rd; /* likewise */
+ int oopwriting; /* since on_fd is not idempotent */
int max_queue, stream;
const char *quitting;
int since_activity; /* periods */
conn_make_some_xmits(conn);
if (!conn->xmitu) {
loop->cancel_fd(loop, conn->fd, OOP_WRITE);
+ conn->oopwriting= 0;
return;
}
void *rp= conn_write_some_xmits(conn);
if (rp==OOP_CONTINUE) {
- loop->on_fd(loop, conn->fd, OOP_WRITE, conn_writeable, conn);
+ if (!conn->oopwriting) {
+ loop->on_fd(loop, conn->fd, OOP_WRITE, conn_writeable, conn);
+ conn->oopwriting= 1;
+ }
return;
} else if (rp==OOP_HALT) {
return;