z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
Previous topic | Next topic | Contents | Contact z/OS | Library | PDF


EZASO6AS sample server program for IPv6

z/OS Communications Server: IP Sockets Application Programming Interface Guide and Reference
SC27-3660-00

The EZASO6AS program is a server program that shows you how to use the following calls provided by the macro socket interface:
  • ACCEPT
  • BIND
  • CLOSE
  • GETADDRINFO
  • GETHOSTNAME
  • FREEADDRINFO
  • INITAPI
  • LISTEN
  • PTON
  • READ
  • SOCKET
  • TERMAPI
  • WRITE
EZASO6AS CSECT
EZASO6AS AMODE ANY
EZASO6AS RMODE ANY
*        PRINT NOGEN
***********************************************************************
*                                                                     *
*   MODULE NAME:  EZASO6AS Sample IPV6 server program                 *
*                                                                     *
* Copyright:    Licensed Materials - Property of IBM                  *
*                                                                     *
*               "Restricted Materials of IBM"                         *
*                                                                     *
*               5694-A01                                              *
*                                                                     *
*               (C) Copyright IBM Corp. 2002, 2003                    *
*                                                                     *
*               US Government Users Restricted Rights -               *
*               Use, duplication or disclosure restricted by          *
*               GSA ADP Schedule Contract with IBM Corp.              *
*                                                                     *
* Status:       CSV1R5                                                *
*                                                                     *
*                                                                     *
*   LANGUAGE:  Assembler                                              *
*                                                                     *
*   ATTRIBUTES: NON-REUSABLE                                          *
*                                                                     *
*   REGISTER USAGE:                                                   *
*        R1  =                                                        *
*        R2  =                                                        *
*        R3  = BASE REG 1                                             *
*        R4  = BASE REG 2 (UNUSED)                                    *
*        R5  = FUTURE BASE REG?                                       *
*        R6  = TEMP                                                   *
*        R7  = RETURN REG                                             *
*        R8  =                                                        *
*        R9  = A(WORK AREA)                                           *
*        R10 =                                                        *
*        R11 =                                                        *
*        R12 =                                                        *
*        R13 = SAVE AREA                                              *
*        R14 =                                                        *
*        R15 =                                                        *
*                                                                     *
*   INPUT: NONE                                                       *
*   OUTPUT: WTO results of each test case                             *
*                                                                     *
***********************************************************************
         GBLB  &TRACE  ASSEMBLER VARIABLE TO CONTROL TRACE GENERATION
&TRACE   SETB  1       1=TRACE ON  0=TRACE OFF
R0       EQU   0
R1       EQU   1
R2       EQU   2
R3       EQU   3
R4       EQU   4
R5       EQU   5
R6       EQU   6
R7       EQU   7
R8       EQU   8
R9       EQU   9
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
*---------------------------------------------------------------------*
* START OF EXECUTABLE CODE                                            *
*---------------------------------------------------------------------*
         USING *,R3,R4            TELL ASSEMBLER OF OTHERS
         SAVE (14,12),T,*
         LR    R3,R15             COPY EP REG TO FIRST BASE
         LA    R5,2048            GET R5 HALFWAY THERE
         LA    R5,2048(R5)        GET R5 THERE
         LA    R4,0(R5,R3)        GET R4 THERE
         LA    R12,12             JUST FOR FUN!
         ST    R1,PARMADDR        SAVE ADDRESS OF PARAMETER LIST
         L     R1,0(R1)           GET POINTER
         LH    R1,0(R1)           GET LENGTH
*        STC   R1,TRACE           USE IT AS FLAG
         L     R7,=A(SOCSAVE)     GET NEW SAVE AREA
         ST    R7,8(R13)          SAVE ADDRESS OF NEW SAVE AREA
         ST    R13,4(R7)          COMPLETE SAVE AREA CHAIN
         LR    R13,R7             NOW SWAP THEM
         L     R9,=A(MYCB)        POINT TO THE CONTROL BLOCK
         USING MYCB,R9            TELL ASSEMBLER
*---------------------------------------------------------------------*
*   BUILD MESSAGE FOR CONSOLE
*---------------------------------------------------------------------*
*                                 INITIALIZE MESSAGE TEXT FIELDS
LOOP     EQU   *
         MVC   MSGNUM(8),SUBTASK  WHO I AM
         MVC   TYPE,MSGSTART      MOVE 'STARTED' TO MESSAGE
*
         MVC   MSGRSLT1,MSGSUCC   ...SUCCESSFUL TEXT
         MVC   MSGRSLT2,BLANK35
*
         STM   R14,R12,12(R13)    JUST FOR DEBUGGING
         BAL   R14,WTOSUB         --> DO STARTING WTO
***********************************************************************
*                                                                     *
*        Issue INITAPI to connect to interface                        *
*                                                                     *
***********************************************************************
         POST  ECB,1              NEXT IS ALWAYS SYNCH
         MVI   SYNFLAG,0          MOVE A 1 FOR ASYNC
         MVC   TYPE,MINITAPI      MOVE 'INITAPI' TO MESSAGE
*
         EZASMI TYPE=INITAPI,     Issue INITAPI Macro                  X
               SUBTASK=SUBTASK,   SPECIFY SUBTASK IDENTIFIER           X
               MAXSOC=MAXSOC,     SPECIFY MAXIMUM NUMBER OF SOCKETS    X
               MAXSNO=MAXSNO,     (HIGHEST SOCKET NUMBER ASSIGNED)     X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               APITYPE=APITYPE,   (SPECIFY APITYPE FIELD)              X
               ERROR=ERROR        ABEND IF ERROR ON MACRO
*             ASYNC=('EXIT',MYEXIT), (SPECIFY AN EXIT)                X
*              IDENT=IDENT,       TCP ADDR SPACE AND MY ADDR SPACE
*              ASYNC=('ECB')      (SPECIFY ECBS)
*
         BAL   R14,RCCHECK        --> DID IT WORK?
***********************************************************************
*                                                                     *
*        Issue SOCKET Macro to obtain a socket descriptor             *
*                  *** INET and STREAM ***                            *
*                                                                     *
***********************************************************************
         MVC   TYPE,MSOCKET       MOVE 'SOCKET' TO MESSAGE
*
         EZASMI TYPE=SOCKET,      Issue SOCKET Macro                   X
               AF='INET6',        INET, IUCV, INET6                    X
               SOCTYPE='STREAM',  STREAM(TCP) DATAGRAM(UDP) or RAW     X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
*---------------------------------------------------------------------*
*        Get socket descriptor number
*---------------------------------------------------------------------*
         STH   R8,S               SAVE RETCODE (=SOCKET DESCRIPTOR)
***********************************************************************
*                                                                     *
*        ISSUE PTON MACRO                                             *
*                                                                     *
***********************************************************************
         MVC   PRESENTABLE_ADDR,LOOPIPV6 IP ADDRESS TO CONVERT
*
* DISPLAY THE RETURNED ADDRESS IN PRESENTABLE FORMAT
*
         MVC   TYPE,MPTON         MOVE 'PTON  ' TO MESSAGE
*
         EZASMI TYPE=PTON,        ISSUE PTON MACRO                     X
               AF='INET6',                                             X
               SRCADDR=PRESENTABLE_ADDR,                               X
               SRCLEN=PRESENTABLE_ADDR_LEN,                            X
               DSTADDR=NUMERIC_ADDR,                                   X
               ERRNO=ERRNO,       (SPECIFY ERRNO FIELD)                X
               RETCODE=RETCODE,   (SPECIFY RETCODE FIELD)              X
               ERROR=ERROR        ABEND IF MACRO ERROR
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
         MVC   ADDRESS,NUMERIC_ADDR
***********************************************************************
*                                                                     *
*        ISSUE GETHOSTNAME CALL                                       *
*                                                                     *
***********************************************************************
         MVC   TYPE,MGHOSTN            'GETHOSTN' TO MESSAGE
         EZASMI TYPE=GETHOSTNAME,                                      X
               NAMELEN=HOSTNAMEL, LENGTH OF HOST NAME FIELD            X
               NAME=HOSTNAME,     HOST NAME                            X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
         MVC   MSGRSLT1,=C'HOST NAME ' INDICATE WHAT WE'RE PROCESSING
         XC    MSGRSLT2,MSGRSLT2
         MVC   MSGRSLT2,HOSTNAME
         STM   R14,R12,12(R13)    JUST FOR DEBUGGING
         BAL   R14,WTOSUB         SEND TO THE CONSOLE
         MVC   NODENAME(24),HOSTNAME
***********************************************************************
*                                                                     *
*        ISSUE GETADDRINFO MACRO                                      *
*                                                                     *
***********************************************************************
         MVC   TYPE,MGADDRI       MOVE 'GETADDRINFO' TO MESSAGE
         XC    ADDR_INFO(addrinfo_len),ADDR_INFO CLEAR OUT ALL HINTS
         LA    R6,ai_CANONNAMEOK  REQUEST THE CANONICAL NAME
         ST    R6,ai_flags        SAVE THE HINT FLAGS
         LA    R6,ADDR_INFO       POINT TO THE HINTS ADDRINFO
         ST    R6,HINTS           SAVE THE ADDRESS OF THE HINTS
         LA    R6,0               LENGTH OF SERVICE NAME
         ST    R6,SERVNAMEL       SAVE THE SERVICE NAME LENGTH
*
         EZASMI TYPE=GETADDRINFO, ISSUE GETADDRINFO MACRO              X
               NODE=NODENAME,     NODE GETTING INFORMATION FOR         X
               NODELEN=NODENAMEL, LENGTH OF NODE NAME                  X
               SERVICE=SERVNAME,  SERVICE GETTING INFORMATION FOR      X
               SERVLEN=SERVNAMEL, LENGTH OF SERVICE NAME               X
               HINTS=HINTS,       HINTS FOR FILTERING                  X
               RES=RESULT_ADDRINFO, RETURNED ADDRESS INFORMATION       X
               CANNLEN=CANNAMEL,  LENGTH OF CANONICAL NAME             X
               ERRNO=ERRNO,       (SPECIFY ERRNO FIELD)                X
               RETCODE=RETCODE,   (SPECIFY RETCODE FIELD)              X
               ERROR=ERROR        ABEND IF MACRO ERROR
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
* IF RETURNED SUCCESSFULLY, THEN PROCESS THE ADDRINFO STRUCTORE AND
* THEN CHECK TO SEE IF THERE IS ANOTHER TO PROCESS.  CONTINUE UNTIL
* AI_NEXT IS NULL.
*
         ICM   R10,B'1111',RESULT_ADDRINFO EXAMINE RETURNED ADDRINFO
         BZ    NOAIS       IF NOT RETURNED THEN HOST NOT FOUND?
SEEAIS   DS    0H
         MVC   ADDR_INFO(addrinfo_len),0(R10) LOAD ADDRINFO STRUCTURE
         XC    OPNAMELEN,OPNAMELEN CLEAR NAME LENGTH OUTPUT FIELD
         XC    OPCANON,OPCANON   CLEAR CANONICAL NAME OUTPUT FIELD
         XC    OPNAME,OPNAME     CLEAR NAME OUTPUT FIELD
         XC    OPNEXT,OPNEXT     CLEAR NEXT ADDRINFO OUTPUT FIELD
*
         CALL  EZACIC09,(RESULT_ADDRINFO,                              X
               OPNAMELEN,        OUTPUT NAME LENGTH                    X
               OPCANON,          OUTPUT CANONICAL NAME                 X
               OPNAME,           OUTPUT NAME                           X
               OPNEXT,           OUTPUT NEXT RESULT ADDRESS INFO       X
               RETCODE),VL
*
* FORMAT CANONNAME.
*
         MVC   MSGRSLT1,=C'CANON NAME' INDICATE WHAT WE'RE PROCESSING
         XC    MSGRSLT2,MSGRSLT2
         MVC   MSGRSLT2(21),=C' - NO CANON NAME     '
         XC    MSGRSLT2,MSGRSLT2
         MVC   MSGRSLT2,OPCANON
FMTAISNC DS    0H
         STM   R14,R12,12(R13)    JUST FOR DEBUGGING
         BAL   R14,WTOSUB         SEND TO THE CONSOLE
FMTAISNCE DS    0H
*
* IF AI_NEXT IS NULL THEN THIS IS THE LAST STRUCTURE ON THE LIST.
* TO PROCESS ALL STRUCTURES:
* 1.  GET THE FIRST ONE AND PROCESS THE FIELDS RETURNED.
* 2.  USE THE ADDRESS IN AI_NEXT TO GET THE NEXT ADDRESS IF NOT NULL.
* 3.  PROCESS THE NEW FIELDS IN THE SUBSEQUENT STRUCTURE.
* 4.  GOTO 2.
*
         ICM   R10,B'1111',ai_next SEE IF NEXT ADDRESS IS NULL...
         BP    SEEAIS            NOPE...PARSE IT.
*
***********************************************************************
*                                                                     *
*        ISSUE FREEADDRINFO MACRO.  MUST BE DRIVEN AFTER A            *
*        SUCCESSFUL GETADDRINFO; OTHERWISE, RESOLVER STORAGE WILL     *
*        BE CONSUMED.                                                 *
*                                                                     *
***********************************************************************
         MVC   TYPE,MFADDRI       MOVE 'FREEADDRINFO' TO MESSAGE
*
         EZASMI TYPE=FREEADDRINFO, ISSUE FREEADDRINFO MACRO            X
               ADDRINFO=RESULT_ADDRINFO,                               X
               ERRNO=ERRNO,       (SPECIFY ERRNO FIELD)                X
               RETCODE=RETCODE,   (SPECIFY RETCODE FIELD)              X
               ERROR=ERROR        ABEND IF MACRO ERROR
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
         B     ENDAIS
NOAIS    DS    0H
         XC    MSGRSLT2,MSGRSLT2
         MVC   MSGRSLT2(21),=C'Result not returned. '
         BAL   R14,WTOSUB         SEND TO THE CONSOLE
ENDAIS   DS    0H
*
***********************************************************************
*                                                                     *
*        Issue BIND socket                                            *
*                                                                     *
***********************************************************************
         MVC   TYPE,MBIND         MOVE 'BIND' TO MESSAGE
         MVC   PORT(2),PORTS      Load STREAM port #
*
         EZASMI TYPE=BIND,        Issue Macro                          X
               S=S,               STREAM                               X
               NAME=NAME,         (SOCKET NAME STRUCTURE)              X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
***********************************************************************
*                                                                     *
*        Issue LISTEN - Backlog = 5                                   *
*                                                                     *
***********************************************************************
         MVC   TYPE,MLISTEN       MOVE 'LISTEN' TO MESSAGE
*
         EZASMI TYPE=LISTEN,      Issue Macro                          X
               S=S,               STREAM                               X
               BACKLOG=BACKLOG,   BACKLOG                              X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
***********************************************************************
*                                                                     *
*        Issue ACCEPT - Block until connection from peer              *
*                                                                     *
***********************************************************************
         MVC   TYPE,MACCEPT       MOVE 'ACCEPT' TO MESSAGE
         MVC   PORT(2),PORTS      Load STREAM port #
*
         EZASMI TYPE=ACCEPT,      Issue Macro                          X
               S=S,               STREAM                               X
               NAME=NAME,         (SOCKET NAME STRUCTURE)              X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
* Message RESULTS text
         STH   R8,SOCDESCA        SAVE RETCODE (SOCKET DESCRIPTOR)
***********************************************************************
*                                                                     *
*        ISSUE NTOP MACRO                                             *
*                                                                     *
***********************************************************************
         MVC   NUMERIC_ADDR,ADDRESS       IP ADDRESS FROM ACCEPT
*
* DISPLAY THE NUMERIC ADDRESS FIRST
*
         MVC   TYPE,MNTOP         MOVE 'NTOP  ' TO MESSAGE
*
* TRANSLATE IT TO PRESENTABLE FORM
*
         EZASMI TYPE=NTOP,        ISSUE PTON MACRO                     X
               AF='INET6',                                             X
               SRCADDR=NUMERIC_ADDR,                                   X
               DSTADDR=PRESENTABLE_ADDR,                               X
               DSTLEN=PRESENTABLE_ADDR_LEN,                            X
               ERRNO=ERRNO,       (SPECIFY ERRNO FIELD)                X
               RETCODE=RETCODE,   (SPECIFY RETCODE FIELD)              X
               ERROR=ERROR        ABEND IF MACRO ERROR
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
* DISPLAY THE RETURNED ADDRESS IN PRESENTABLE FORMAT
*
         MVC   MSGRSLT1,=C'DSTADDR   ' INDICATE WHAT WE'RE PROCESSING
         XC    MSGRSLT2,MSGRSLT2
         MVC   MSGRSLT2(L'PRESENTABLE_ADDR),PRESENTABLE_ADDR
         STM   R14,R12,12(R13)    JUST FOR DEBUGGING
         BAL   R14,WTOSUB         SEND TO THE CONSOLE
***********************************************************************
*                                                                     *
*        Issue READ - Read data and store in buffer                   *
*                                                                     *
***********************************************************************
         MVC   TYPE,MREAD         MOVE 'READ  ' TO MESSAGE
*
         EZASMI TYPE=READ,        Issue Macro                          X
               S=SOCDESCA,        ACCEPT SOCKET                        X
               NBYTE=NBYTE,       SIZE OF BUFFER                       X
               BUF=BUF,           (BUFFER)                             X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
         MVC   MSGRSLT1,MSGBUFF
         MVC   MSGRSLT2,BUF
         BAL   R14,WTOSUB         --> PRINT IT
*
*
***********************************************************************
*                                                                     *
*        Issue WRITE - Write data from buffer                         *
*                                                                     *
***********************************************************************
         MVC   TYPE,MWRITE        MOVE 'WRITE ' TO MESSAGE
*
         EZASMI TYPE=WRITE,       Issue Macro                          X
               S=SOCDESCA,        ACCEPT Socket                        X
               NBYTE=NBYTE,       SIZE OF BUFFER                       X
               BUF=BUF,           (BUFFER)                             X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
***********************************************************************
*                                                                     *
*        Issue CLOSE for ACCEPT socket                                *
*                                                                     *
***********************************************************************
         MVC   TYPE,MCLOSE        MOVE 'CLOSE' TO MESSAGE
*
         EZASMI TYPE=CLOSE,       Issue Macro                          X
               S=SOCDESCA,        ACCEPT                               X
               ERRNO=ERRNO,       (Specify ERRNO field)                X
               RETCODE=RETCODE,   (Specify RETCODE field)              X
               ERROR=ERROR        Abend if Macro error
*             REQAREA=REQAREA,   IN CASE WE ARE DOING EXITS OR ECBS   X
*
         MVC   MSGRSLT2,BLANK35
         BAL   R14,RCCHECK        CHECK FOR SUCCESSFUL CALL
*
***********************************************************************
*                                                                     *
*        Terminate Connection to API                                  *
*                                                                     *
***********************************************************************
         MVC   TYPE,MTERMAPI      MOVE 'TERMAPI' TO MESSAGE
*
         POST  ECB,1              FOLLOWING IS ALWAYS SYNCH
         EZASMI TYPE=TERMAPI      Issue EZASMI Macro for Termapi
*---------------------------------------------------------------------*
* Message RESULTS text
         MVC   MSGRSLT2,BLANK35
*
         BAL   R14,RCCHECK        --> CHECK RC
*---------------------------------------------------------------------*
*        Issue console message for task termination
*---------------------------------------------------------------------*
         MVC   TYPE,MSGEND        Move 'ENDED' to message
*
         MVC   MSGRSLT1,MSGSUCC   ...SUCCESSFUL text
         MVC   MSGRSLT2,BLANK35
*
         BAL   R14,WTOSUB
         LA    R14,1              CONSTANT
         AH    R14,APITYPE        ADD
         STH   R14,APITYPE        STORE
         CH    R14,=H'3'          COMPARE
*        BE    LOOP               --> LETS DO IT AGAIN!
*---------------------------------------------------------------------*
*        Return to Caller
*---------------------------------------------------------------------*
         L     R13,4(R13)
         RETURN (14,12),T,RC=0
WTOSUB   EQU   *
         LR    R7,R14             COPY RETURN REG
         MVC   MSGCMD(8),TYPE
         WTO   TEXT=MSG           WRITE MESSAGE TO OPERATOR
         BR    R7                 --> RETURN TO CALLER
         CNOP  2,4
*        USES R6,R7,R8         RETCODE RETURNED IN R8
RCCHECK  EQU   *
         LR    R7,R14             COPY TO REAL RETURN REG
         MVC   MSGRSLT1,MSGSUCC   ...SUCCESS TEXT
         L     R6,RETCODE
         LTR   R6,R6
         BM    NOWAIT
         CLI   SYNFLAG,0          PLAIN CASE?
         BE    NOWAIT             --> SKIP IT
         MVC   KEY+14(8),SUBTASK
         MVC   KEY+23(8),TYPE
KEY      WTO   'WAIT: XXXXXXXX XXXXXXXX'
         WAIT  ECB=ECB
NOWAIT   EQU   *
*        LA    R15,ECB
*        ST    R15,ECB
         ST    R9,ECB             MAKE THIS THE TOKEN AGAIN
         L     R6,RETCODE         CHECK FOR SUCCESSFUL CALL
         CLC   TYPE,=CL8'GETHOSTI'
         BE    HOSTIDRC           HANDLE PRINTING HOST ID
         LTR   R8,R6              SAVE A COPY
*
         BNL   CONT00
FAILMSG  EQU   *
         MVC   MSGRSLT1,MSGFAIL   ...FAIL TEXT
CONT00   EQU   *
*
*---------------------------------------------------------------------*
*        FORMAT THE RETCODE= -XXXXXXX ERRNO= XXXXXXX MSG RESULTS
*        ***> R6 = RETCODE VALUE ON ENTRY
*---------------------------------------------------------------------*
         MVC   MSGRTCT,MSGRETC    ' RETCODE= '
         MVI   MSGRTCS,C'+'
         LTR   R6,R6
         BNM   NOTM               -->
         MVI   MSGRTCS,C'-'       MOVE SIGN WHICH IS ALWAYS MINUS
NOTM     EQU   *
         MVC   MSGERRT,MSGERRN    ' ERRNO= '
*
         CVD   R6,DWORK           CONVERT IT TO DECIMAL
         UNPK  MSGRTCV,DWORK+4(4) UNPACK IT
         OI    MSGRTCV+6,X'F0'    CORRECT THE SIGN
ERRNOFMT EQU   *
         L     R6,ERRNO           GET ERRNO VALUE
         CVD   R6,DWORK           CONVERT IT TO DECIMAL
         UNPK  MSGERRV,DWORK+4(4) UNPACK IT
         OI    MSGERRV+6,X'F0'    CORRECT THE SIGN
*
         MVC   MSGRSLT2(35),MSGRTCD
*
         MVI   MSGRTHX,X'40'      CLEAR HEX INDICATOR
         SR    R6,R6              CLEAR OUT...
         ST    R6,RETCODE            RETCODE AND...
         ST    R6,ERRNO                 ERRNO
*
*
         CLI   TRACE,0
         BNE   NOTRACE
         LR    R14,R7             GIVE HIM RETURN REG
         B     WTOSUB             --> DO WTO
NOTRACE  EQU   *
         BR    R7                 --> RETURN TO CALLER
*
HOSTIDRC EQU   *               VALID HOSTID MAY LOOK LIKE NEG. RC
         C     R6,=F'-1'       ONLY -1 RC INDICATES FAILURE
         BE    FAILMSG            ...BAD RC, USE STANDARD MSG
         LR    R8,R6              ...NEXT CALL EXPECTS ADDR IN R8
         MVC   MSGRSLT1,MSGSUCC   ...SUCCESS TEXT
         UNPK  HEXRC(9),RETCODE(5)   PLUS ONE FOR FAKE SIGN
         TR    HEXRC(8),HEXTAB    ...CONVERT UNPK TO PRINTABLE HEX
         MVI   HEXRC+8,X'40'      ...SPACE OUT FAKED SIGN BYTE
         MVI   MSGRTHX,C'X'       ...INDICATE INFO IS HEX
         B     ERRNOFMT
*
SYNFLAG  DC    H'0'               DEFAULT TO SYN
TRACE    DC    H'0'               DEFAULT TO TRACE
MYEXIT   DC   A(MYEXIT1,SUBTASK)
MYEXIT1  SAVE (14,12),T,*
         LR   R2,R15
         USING MYEXIT1,R2
         LM   R8,R9,0(R1)            GET TWO TOKENS
         MVC  EXKEY+14(8),0(R8)      TELL WHO
         MVC  EXKEY+23(8),TYPE       TELL WHAT
EXKEY    WTO 'EXIT: XXXXXXXX XXXXXXXX'
         POST ECB,1
         RETURN (14,12),T,RC=0
         DROP  R2
*---------------------------------------------------------------------*
*        ABEND PROGRAM AND GET DUMP
*---------------------------------------------------------------------*
ERROR    ABEND 1,DUMP
*---------------------------------------------------------------------*
* CONSTANTS USED TO RUN PROGRAM                                       *
*---------------------------------------------------------------------*
EZASMGW  EZASMI TYPE=GLOBAL,      Storage definition for GWA           X
               STORAGE=CSECT
*---------------------*
* INITAPI macro parms *
*---------------------*
SUBTASK  DC    CL8'EZASO6AS'      SUBTASK PARM VALUE
MAXSOC   DC    AL2(50)            MAXSOC PARM VALUE
APITYPE  DC    H'2'               OR A 3
MAXSNO   DC    F'0'               (HIGHEST SOCKET DESCRIPTOR AVAILABLE)
IDENT    DC    0CL16' '
         DC    CL8'        '      NAME OF TCP TO WHICH CONNECTING
         DC    CL8'SOC401CB'      MY ADDR SPACE NAME
*---------------------------------------------------------------------*
* SOCKET macro parms *
*--------------------*
S        DC    H'0'               SOCKET DESCRIPTOR FOR STREAM
*---------------------------------------------------------------------*
* BIND MACRO PARMS   *
*--------------------*
         CNOP  0,4
NAME     DC    0CL28' '           SOCKET IPV6 NAME STRUCTURE
         DC    AL1(16)            Address Length
         DC    AL1(19)            Family
PORT     DC    H'0'
FLOWINFO DC    XL4'00'
ADDRESS  DC    XL16'FF'
         DC    XL4'00'            SCOPEID
ADDR     DC    XL16'00000000000000000000000000000001' Internet Address
PORTS    DC    H'11007'
*---------------------------------------------------------------------*
* LISTEN PARMS       *
*--------------------*
BACKLOG  DC    F'5'               BACKLOG
*---------------------------------------------------------------------*
* READ MACRO PARMS   *
*--------------------*
NBYTE    DC    F'50'              SIZE OF BUFFER
SOCDESCA DC    H'0'               SOCKET DESCRIPTOR FROM ACCEPT
BUF      DC    CL50' THIS SHOULD NEVER APPEAR!!! : ('
*---------------------------------------------------------------------*
* WTO FRAGMENTS *
*---------------*
MNTOP    DC    CL8'NTOP   '
MPTON    DC    CL8'PTON   '
MFADDRI  DC    CL8'FADDRI '
MGADDRI  DC    CL8'GADDRI '
MGHOSTN  DC    CL8'GETHOSTN'
MGNAMEI  DC    CL8'GNAMEI '
MINITAPI DC    CL8'INITAPI'
MSOCKET  DC    CL8'SOCKET'
MBIND    DC    CL8'BIND'
MACCEPT  DC    CL8'ACCEPT'
MLISTEN  DC    CL8'LISTEN'
MREAD    DC    CL8'READ'
MWRITE   DC    CL8'WRITE'
MCLOSE   DC    CL8'CLOSE'
MTERMAPI DC    CL8'TERMAPI'
MSGSTART DC    CL8' STARTED'
MSGEND   DC    CL8' ENDED  '
MSGBUFF  DC    CL10' BUFFER:  '                    ...
MSGSUCC  DC    CL10' SUCCESS  '     Command results...
MSGFAIL  DC    CL10' FAIL: ( '                    ...
MSGRETC  DC    CL10' RETCODE= '                    ...
MSGERRN  DC    CL10' ERRNO=   '                    ...
BLANK35  DC    CL35' '
*---------------------------------------------------------------------*
* ERROR NUMBER / RETURN CODE FIELDS *
*-----------------------------------*
*---------------------------------------------------------------------*
* MESSAGE AREA *
*--------------*
MSG      DC    0F'0'              MESSAGE AREA
         DC    AL2(MSGE-MSGNUM)   LENGTH OF MESSAGE
MSGNUM   DC    CL10'EZASO6AS:'    'EZASO6ASXX:'
MSGCMD   DC    CL8' '             COMMAND ISSUED
MSGRSLT1 DC    CL10' '            COMMAND RESULTS (SUCC, PASS, FAIL)
MSGRSLT2 DC    CL35' '            RETURNED VALUES
MSGE     EQU   *                  End of message
*---------------------------------------------------------------------*
* MESSAGE RESULTS AREAS (fill in and move to MSGRSLT2) *
*------------------------------------------------------*
MSGRTCD  DC    0CL35' '           GENERAL RETURNED VALUE
MSGRTCT  DC    CL9' RETCODE='     ' RETCODE= '
MSGRTHX  DC    CL1' '             'X' X FOR GETHOSTID
MSGRTCS  DC    CL1' '             '-' (NEGATIVE SIGN)
HEXRC    EQU   MSGRTCS            HEX RC WILL START AT SIGN LOCATION
MSGRTCV  DC    CL7' '             RETURNED VALUE (RETCODE)
MSGERRT  DC    CL10' ERRNO='      ' ERRNO=   '
MSGERRV  DC    CL7' '             RETURNED VALUE (ERRNO)
*---------------------------------------------------------------------*
PARMADDR DC    A(0)               PARM ADDRESS SAVE AREA
DWORK    DC    D'0'               WORK AREA
HEXTAB   EQU   *-240              TAB TO CONVERT TO PRINTABLE HEX
*                                 FIRST 240 BYTES NOT REFERENCED
         DC    CL16'0123456789ABCDEF'
         EZBREHST DSECT=NO,LIST=YES,HOSTENT=NO,ADRINFO=YES
         LTORG ,
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* REG/SAVEAREA *
*--------------*
SOCSAVE  DC    9D'0'              SAVE AREA
         CNOP  0,8
MYCB     EQU   *                  MY CONTROL BLOCK
REQAREA  EQU   *
ECB      DC    A(ECB)             SELF POINTER
         DC    CL100'WORK AREA'
MYTIE    EZASMI TYPE=TASK,STORAGE=CSECT     TIE
TYPE     DC    CL8'TYPE'
ERRNO    DC    F'0'
RETCODE  DC    F'0'
*
REQARG   DC    F'1'
RETARG   DS    0H
*
* FOR NTOP AND PTON
*
NUMERIC_ADDR DS CL16              IP ADDRESS IN NUMERIC FORM
PRESENTABLE_ADDR DS CL45          IP ADDRESS IN PRESENTABLE FORM
PRESENTABLE_ADDR_LEN DC AL2(L'PRESENTABLE_ADDR) LENGTH OF PRESENTABLE  X
                                  IP ADDRESS
LOOPIPV6 DC  CL45'::1'            IPV6 LOOPBACK ADDRESS
*
* FOR GETHOSTNAME, GETADDRINFO, and FREEADDRINFO
*
HOSTNAME DC    CL24' '
NODENAME DC    CL255' '           FOR THE RETURNED HOST NAME
SERVNAME DC    C' '               SERVICE BEING RESOLVED
         CNOP  0,4
HOSTNAMEL DC   AL4(L'HOSTNAME)    LENGTH OF THE HOST NAME
NODENAMEL DC   AL4(L'NODENAME)    LENGTH OF THE NODE NAME
SERVNAMEL DC   F'0'               LENGTH OF THE SERVICE NAME
RESULT_ADDRINFO DC F'0'           RETURNED ADDRINFO
CANNAMEL DC    F'0'               CANNONICAL NAME LENGTH IN ADDRINFO
HINTS    DC    F'0'               ADDRESS OF HINTS ADDRINFO
*
* For EZACIC09 processing
*
OPNAMELEN DS   F                  SOCKET ADDRESS STRUCTURE LENGTH
OPCANON   DS   CL256              CANONICAL NAME
OPNAME    DS   CL28               SOCKET ADDRESS STRUCTURE
OPNEXT    DS   F                  NEXT RESULT ADDRESS INFO IN CHAIN
*
MYNEXT   DC    A(MYCB)            NEXT IN CHAIN FOR MULTIPLES
         CNOP  0,8
MYLEN    EQU   *-MYCB
MYCB2    EQU   *
         ORG   *+MYLEN
         CNOP  0,8
         DC    CL8'&SYSDATE'
         DC    CL8'&SYSTIME'
         BPXYSOCK DSECT=NO,LIST=YES
         END
Figure 1. EZASO6AS sample server program for IPv6

Go to the previous page Go to the next page




Copyright IBM Corporation 1990, 2014