*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
