*DECK IPPSTAS 
USETEXT TEXTIPL 
      PROC IPPSTAS (SOCKID, STATE, READ, WRITE, SOCKSTATUS);
*CALL COPYRITE          CDCNET - COPYRIGHT CONTROL DATA. 1992.
# TITLE IPPSTAS - STATUS SOCKET                                        #
  
      BEGIN                            # IPPSTAS                       #
# 
****  IPPSTAS  STATUS SOCKET
* 
*     THIS PROCEDURE QUERYS THE STATUS OF A SOCKET.  THE SOCKET STATE 
*     AND THE ABILITY TO CURRENTLY RECEIVE OR SEND DATA ARE THE STATUS
*     VALUES RETURNED.
* 
*     PROC IPPSTAS
* 
*     ENTRY    SOCKID     = INTEGER VALUE OF A SOCKET.
* 
*     EXIT     STATE      = CURRENT STATE OF THE SOCKET AS DEFINED BY 
*                           *CONNECTSTATE*. 
*              READ       = BOOLEAN, TRUE IF DATA QUEUED. 
*              WRITE      = BOOLEAN, TRUE IF NOT AT APPLICATION BLOCK 
*                           LIMIT.
*              SOCKSTATUS = COMPLETION STATUS 
* 
*     METHOD   CALL THE NAM INPUT HANDLER TO CHECK THE NETWORK. 
*              VERIFY THE SOCKET IS CONNECTED.  IF THE SOCKET HAS 
*              DISCONNECTED FROM NAM, RETURN AN ABORT STATUS. 
*              SET *STATE* TO THE CURRENT SOCKET STATE, SET *READ*
*              TO THE ACN$DATAV VALUE, SET WRITE TO TRUE IF THE 
*              CONNECTION IS NOT AT THE APPLICATION BLOCK LIMIT AS
*              DEFINED IN THE ACN ENTRY FOR THE SOCKET. 
# 
  
# 
****  PROC IPPSTAS - XREF LIST
# 
      XREF
        BEGIN 
        PROC IPINITH;    # NAM INPUT TRAFFIC HANDLER                   #
        END 
# 
**
# 
      ITEM SOCKID              I;      # SOCKET IDENTIFIER             #
      ITEM STATE  S:CONNECTSTATE;      # SOCKET STATE                  #
      ITEM READ                B;      # DATA AVAILABLE                #
      ITEM WRITE               B;      # WRITE ALLOWED                 #
      ITEM SOCKSTATUS S:SOCKSTAT;      # RETURNED SOCKET STATUS        #
      CONTROL EJECT;
# 
****  START MAIN PROCEDURE
# 
  
      BLOCK = FALSE;                   # SET NAM HANDLER NOT TO WAIT   #
      IPINITH;                         # CALL NAM HANDLER              #
  
      SOCKSTATUS = S"OK"; 
      READ = ACN$DATAV [SOCKID];
      WRITE = (ACN$OBC [SOCKID] LS ACN$ABL [SOCKID]); 
  
      IF (ACN$ABORT [SOCKID]) 
      THEN
        BEGIN                          # CONNECTION ABORTED            #
        SOCKSTATUS = S"ABORT";
        READ = FALSE; 
        WRITE = FALSE;
        END 
  
      IF NOT ACN$CONNECT [SOCKID] 
      THEN
        BEGIN 
        SOCKSTATUS = SOCKSTAT"INVALIDST"; 
        READ = FALSE; 
        WRITE = FALSE;
        END 
  
      STATE = ACN$STATE [SOCKID]; 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # IPPSTAS                       #
  
      TERM
