summaryrefslogtreecommitdiff
path: root/src/common/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/socket.c')
-rw-r--r--src/common/socket.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/common/socket.c b/src/common/socket.c
index bedad4ed0..dcaf2cdf2 100644
--- a/src/common/socket.c
+++ b/src/common/socket.c
@@ -687,7 +687,7 @@ int realloc_writefifo(int fd, size_t addition)
return 0;
}
-int WFIFOSET(int fd,int len)
+int _WFIFOSET(int fd, int len, char flush)
{
size_t newreserve;
struct socket_data *s = session[fd];
@@ -712,7 +712,9 @@ int WFIFOSET(int fd,int len)
// For inter-server connections, let the reserve be 1/4th of the link size.
newreserve = s->wdata_size + (s->max_wdata>=FIFOSIZE_SERVERLINK?FIFOSIZE_SERVERLINK/4:wfifo_size);
- if(s->wdata_size >= frame_size)
+ if( flush )
+ flush_fifo(fd);
+ else if(s->wdata_size >= frame_size)
send_from_fifo(fd);
// realloc after sending
@@ -807,7 +809,7 @@ int do_sendrecv(int next)
if(session[i]->wdata_size && session[i]->func_send)
session[i]->func_send(i);
- if(session[i]->eof) //The session check is for when the connection ended in func_parse
+ if(session[i] && session[i]->eof) //The session check is for when the connection ended in func_parse
{ //Finally, even if there is no data to parse, connections signalled eof should be closed, so we call parse_func [Skotlex]
if (session[i]->func_parse)
session[i]->func_parse(i); //This should close the session inmediately.