From 2f33de21fe68c1115ea398fe6b8f03029e4a40ed Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Tue, 7 Sep 2004 15:52:14 +0000 Subject: [PATCH] avoid ioctl on closed socket during client rundown --- src/rsrv/camsgtask.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/rsrv/camsgtask.c b/src/rsrv/camsgtask.c index ac0033a13..edd314f93 100644 --- a/src/rsrv/camsgtask.c +++ b/src/rsrv/camsgtask.c @@ -58,11 +58,26 @@ void camsgtask ( void *pParm ) destroy_tcp_client ( client ); return; } - cas_send_bs_msg ( client, TRUE ); while ( ! client->disconnect ) { + + /* + * allow message to batch up if more are comming + */ + status = socket_ioctl (client->sock, FIONREAD, &nchars); + if (status < 0) { + char sockErrBuf[64]; + epicsSocketConvertErrnoToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf("CAS: io ctl err - %s\n", + sockErrBuf); + cas_send_bs_msg(client, TRUE); + } + else if (nchars == 0){ + cas_send_bs_msg(client, TRUE); + } + client->recv.stk = 0; - assert ( client->recv.maxstk >= client->recv.cnt ); nchars = recv ( client->sock, &client->recv.buf[client->recv.cnt], (int) ( client->recv.maxstk - client->recv.cnt ), 0 ); @@ -138,22 +153,6 @@ void camsgtask ( void *pParm ) epicsPrintf ("CAS: forcing disconnect from %s\n", buf); break; } - - /* - * allow message to batch up if more are comming - */ - status = socket_ioctl (client->sock, FIONREAD, &nchars); - if (status < 0) { - char sockErrBuf[64]; - epicsSocketConvertErrnoToString ( - sockErrBuf, sizeof ( sockErrBuf ) ); - errlogPrintf("CAS: io ctl err - %s\n", - sockErrBuf); - cas_send_bs_msg(client, TRUE); - } - else if (nchars == 0){ - cas_send_bs_msg(client, TRUE); - } } LOCK_CLIENTQ;