avoid ioctl on closed socket during client rundown

This commit is contained in:
Jeff Hill
2004-09-07 15:52:14 +00:00
parent e553e1b21e
commit 2f33de21fe

View File

@@ -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;