From 4c2a8386a151fdec0057949db7118725d15892b6 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 30 Jan 2004 01:35:55 +0000 Subject: [PATCH] clean up better if we receive disconnect notification when sending --- src/rsrv/caserverio.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/rsrv/caserverio.c b/src/rsrv/caserverio.c index a0b42646c..c227d64ee 100644 --- a/src/rsrv/caserverio.c +++ b/src/rsrv/caserverio.c @@ -24,6 +24,7 @@ #include "dbDefs.h" #include "osiSock.h" #include "epicsTime.h" +#include "epicsSignal.h" #include "errlog.h" #include "caerr.h" @@ -103,7 +104,40 @@ void cas_send_bs_msg ( struct client *pclient, int lock_needed ) } pclient->disconnect = TRUE; pclient->send.stk = 0u; - break; + + /* + * wakeup the receive thread + */ + { + enum epicsSocketSystemCallInterruptMechanismQueryInfo info = + epicsSocketSystemCallInterruptMechanismQuery (); + switch ( info ) { + case esscimqi_socketCloseRequired: + if ( pclient->sock != INVALID_SOCKET ) { + epicsSocketDestroy ( pclient->sock ); + pclient->sock = INVALID_SOCKET; + } + break; + case esscimqi_socketBothShutdownRequired: + { + int status = shutdown ( pclient->sock, SHUT_RDWR ); + if ( status ) { + char sockErrBuf[64]; + epicsSocketConvertErrnoToString ( + sockErrBuf, sizeof ( sockErrBuf ) ); + errlogPrintf ("rsrv: socket shutdown error was %s\n", + sockErrBuf ); + } + } + break; + case esscimqi_socketSigAlarmRequired: + epicsSignalRaiseSigAlarm ( pclient->tid ); + break; + default: + break; + }; + break; + } } }