*DECK IPPABOS
USETEXT TEXTIPL
PROC IPPABOS (SOCKID, SOCKSTATUS);
*CALL COPYRITE CDCNET - COPYRIGHT CONTROL DATA. 1992.
# TITLE IPPABOS - ABORT SOCKET #
BEGIN # IPPABOS #
#
**** IPPABOS ABORT SOCKET
*
* THIS PROCEDURE CLOSES AN OPEN SOCKET.
*
* PROC IPPABOS
*
* ENTRY SOCKID = INTEGER VALUE OF SOCKET
*
* EXIT SOCKSTATUS = COMPLETION STATUS
*
* METHOD IF THE SOCKET IS NOT CONNECTED THEN RETURN WITH AN
* APPROPRIATE STATUS INDICATION BASED ON THE CURRENT
* STATE. ISSUE THE CON/END/R SM TO INITIATE THE SOCKET
* CLOSING. THE SOCKSET STATE IS SET TO *CLOSING*.
* THIS PROCEDURE MUST BE CALLED TO COMPLETE SOCKET
* CLOSURE AND IS TO BE CALLED ANYTIME AN *ABORT* STATUS
* HAS BEEN OBTAINED FROM AN IP CALL.
#
#
**** PROC IPPABOS - XREF LIST
#
XREF
BEGIN
PROC NETPUT; # OUTPUT A MESSAGE TO THE NETWORK #
PROC IPIDOSM; # DISPATCH OUTPUT SUPERVISORY MESSATE #
END
#
**
#
ITEM SOCKID I; # SOCKET IDENTIFIER #
ITEM SOCKSTATUS S:SOCKSTAT; # RETURNED SOCKET STATUS #
ITEM BUFPOS I; # CURRENT POSITION IN BUFFER #
CONTROL EJECT;
#
**** START MAIN PROCEDURE
#
IF (NOT ACN$CONNECT [SOCKID])
THEN
BEGIN
SOCKSTATUS = S"INVALIDST";
RETURN;
END
P<ABH> = LOC (SABH); # BASE ABH POINTER #
ABHABN [0] = 0; # CLEAR APPL BLOCK NUMBER #
P<APSM> = LOC (OUTBUF); # BASE SUPERVISORY MESSAGE PTR #
SPMSG0 [0] = 0;
SPMSG1 [0] = 0;
CONACN [0] = SOCKID; # STORE CONNECTION NUMBER #
IPIDOSM (CONEND, LCONEN); # SEND CON/END/R SM #
ACN$STATE [SOCKID] = S"CLOSING";
ACN$ABORT [SOCKID] = FALSE;
ACN$CONNECT [SOCKID] = FALSE;
SOCKSTATUS = S"OK";
RETURN; # RETURN TO CALLER #
END # IPPABOS #
TERM