diff --git a/libcharybdis/linebuf.c b/libcharybdis/linebuf.c index 8ac6a31f..a532395f 100644 --- a/libcharybdis/linebuf.c +++ b/libcharybdis/linebuf.c @@ -623,7 +623,7 @@ linebuf_putmsg(buf_head_t * bufhead, const char *format, va_list * va_args, */ int -linebuf_flush(int fd, buf_head_t * bufhead) +linebuf_flush(fde_t *fd, buf_head_t * bufhead) { buf_line_t *bufline; int retval; @@ -652,7 +652,7 @@ linebuf_flush(int fd, buf_head_t * bufhead) } /* Now, try writing data */ - retval = send(fd, bufline->buf + bufhead->writeofs, bufline->len - bufhead->writeofs, 0); + retval = fd->write_impl(fd, bufline->buf + bufhead->writeofs, bufline->len - bufhead->writeofs); if(retval <= 0) return retval; diff --git a/libcharybdis/linebuf.h b/libcharybdis/linebuf.h index 5444fe37..df84dbc4 100644 --- a/libcharybdis/linebuf.h +++ b/libcharybdis/linebuf.h @@ -28,6 +28,7 @@ #define __LINEBUF_H__ #include "tools.h" +#include "commio.h" /* How big we want a buffer - 510 data bytes, plus space for a '\0' */ #define BUF_DATA_SIZE 511 @@ -80,7 +81,7 @@ extern void linebuf_donebuf(buf_head_t *); extern int linebuf_parse(buf_head_t *, char *, int, int); extern int linebuf_get(buf_head_t *, char *, int, int, int); extern void linebuf_putmsg(buf_head_t *, const char *, va_list *, const char *, ...); -extern int linebuf_flush(int, buf_head_t *); +extern int linebuf_flush(fde_t *, buf_head_t *); extern void linebuf_attach(buf_head_t *, buf_head_t *); extern void count_linebuf_memory(size_t *, size_t *); #endif diff --git a/src/send.c b/src/send.c index bd4adea8..7c122977 100644 --- a/src/send.c +++ b/src/send.c @@ -168,6 +168,10 @@ send_queued_write(int fd, void *data) #ifdef USE_IODEBUG_HOOKS hook_data_int hd; #endif + fde_t *F = comm_lookup_fd(to->localClient->fd); + if (!F) + return; + /* cant write anything to a dead socket. */ if(IsIOError(to)) return; @@ -182,7 +186,7 @@ send_queued_write(int fd, void *data) if(linebuf_len(&to->localClient->buf_sendq)) { while ((retlen = - linebuf_flush(to->localClient->fd, &to->localClient->buf_sendq)) > 0) + linebuf_flush(F, &to->localClient->buf_sendq)) > 0) { /* We have some data written .. update counters */ #ifdef USE_IODEBUG_HOOKS