******************************************************************************
*
* Mnemonic: SIshutdown
-* Abstract: This routine will ensure that all tp blocks have been closed
-* with the transport provider and removed from the list. The
-* shutdown flag is set in addition.
-* Parms: gptr - pointer to the ginfo structure (SIHANDLE)
-* Retrns: Nothing.
+* Abstract: Shutdown and abort functions.
+*
* Date: 23 March 1995
* Author: E. Scott Daniels
*
*****************************************************************************
*/
-#include "sisetup.h" // get includes and defines
+#include "sisetup.h" // get includes and defines
+
+/*
+*/
+static void sishutdown( struct ginfo_blk *gptr, int flags ) {
+ struct tp_blk* tpb;
-extern void SIshutdown( struct ginfo_blk *gptr ) {
if( gptr != NULL && gptr->magicnum == MAGICNUM )
{
- gptr->flags |= GIF_SHUTDOWN; // signal shutdown
- while( gptr->tplist != NULL )
+ gptr->flags |= GIF_SHUTDOWN; // signal shutdown
+ for( tpb = gptr->tplist; tpb != NULL; tpb = tpb->next )
{
- gptr->tplist->flags |= TPF_UNBIND; // force unbind on session
- SIterm( gptr, gptr->tplist ); // and drop the session
+ tpb->flags |= (TPF_UNBIND | flags); // force unbind on session and set caller flags
+ SIterm( gptr, tpb ); // term marks ok to delete but does NOT remove it
}
}
-}
+}
+
+/*
+ Run the list of known transport sessions and close them gracefully. This
+ will result in time-waits which might prevent the application from
+ restarting immediately as the listen port(s) might not be usable.
+*/
+extern void SIshutdown( struct ginfo_blk *gptr ) {
+ sishutdown( gptr, 0 );
+}
+
+/*
+ Run the list of known transport sessions and close them by aborting
+ (resetting the connection). This can result in buffered, but untransmitted,
+ data from being lost; the risk should be known by the caller.
+*/
+extern void SIabort( struct ginfo_blk *gptr ) {
+ sishutdown( gptr, TPF_ABORT );
+}