home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / RXSOCK.ZIP / test_c2.cmd < prev    next >
OS/2 REXX Batch file  |  1993-07-16  |  6KB  |  213 lines

  1. /*------------------------------------------------------------------
  2.  * test_c.cmd :
  3.  *------------------------------------------------------------------
  4.  * 08-05-92 originally by Patrick J. Mueller
  5.  *------------------------------------------------------------------*/
  6.  
  7. trace off
  8.  
  9. /*------------------------------------------------------------------
  10.  * choose port number
  11.  *------------------------------------------------------------------*/
  12. port = 1923
  13.  
  14. /*------------------------------------------------------------------
  15.  * initialize socket package
  16.  *------------------------------------------------------------------*/
  17. parse source os .
  18.  
  19. if (os = "OS/2") then
  20.    do
  21.    if RxFuncQuery("SockLoadFuncs") then
  22.       do
  23.       rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
  24.       rc = SockLoadFuncs()
  25.       end
  26.    end
  27.  
  28. if (os = "AIX/6000") then
  29.    do
  30.    rc = SysAddFuncPkg("rxsock.dll")
  31.    end
  32.  
  33. /*------------------------------------------------------------------
  34.  * get server name
  35.  *------------------------------------------------------------------*/
  36. parse arg server .
  37.  
  38. if (server = "?") then
  39.    Usage()
  40.  
  41. if (server = "") then
  42.    server = SockGetHostId()
  43.  
  44. else
  45.    do
  46.    rc = SockGetHostByName(server,"host.!")
  47.    if (rc = 0) then
  48.       do
  49.       say "Error" h_errno "calling SockGetHostByName("server")"
  50.       exit
  51.       end
  52.  
  53.    server = host.!addr;
  54.    end
  55.  
  56. /*---------------------------------------------------------------
  57.  * open socket
  58.  *---------------------------------------------------------------*/
  59. socket  = SockSocket("AF_INET","SOCK_STREAM",0)
  60. if (socket = -1) then
  61.    do
  62.    say "Error on SockSocket:" errno
  63.    exit
  64.    end
  65.  
  66. /*------------------------------------------------------------------
  67.  * catch breaks
  68.  *------------------------------------------------------------------*/
  69. signal on halt
  70.  
  71. /*---------------------------------------------------------------
  72.  * connect socket
  73.  *---------------------------------------------------------------*/
  74. server.!family = "AF_INET"
  75. server.!port   = port
  76. server.!addr   = server
  77.  
  78. rc = SockConnect(socket,"server.!")
  79. if (rc = -1) then
  80.    do
  81.    say "Error on SockConnect:" errno
  82.    exit
  83.    end
  84.  
  85. /*---------------------------------------------------------------
  86.  * set non-blocking mode
  87.  *---------------------------------------------------------------*/
  88. rc = SockIoctl(socket,"FIONBIO",1)
  89.  
  90. /*------------------------------------------------------------------
  91.  * open another socket
  92.  *------------------------------------------------------------------*/
  93. socket2  = SockSocket("AF_INET","SOCK_STREAM",0)
  94. rc = SockIoctl(socket2,"FIONBIO",1)
  95.  
  96. call doSelect socket, socket2
  97. call doSelect socket, socket2, 0
  98. call doSelect socket, socket2, 1
  99.  
  100. /*------------------------------------------------------------------
  101.  * get some data to send over
  102.  *------------------------------------------------------------------*/
  103. data = random(10000,99999)
  104.  
  105. say "Sending  '"data"' to  " server
  106.  
  107. /*------------------------------------------------------------------
  108.  * send the data over
  109.  *------------------------------------------------------------------*/
  110. rc = SockSend(socket,substr(data,1,2))
  111.  
  112. do x = 1 to 1000
  113.    nop
  114. end
  115.  
  116. rc = SockSend(socket,substr(data,3,3))
  117.  
  118. if (rc = -1) then
  119.    do
  120.    say "Error on SockSend:" errno
  121.    exit
  122.    end
  123.  
  124. /*------------------------------------------------------------------
  125.  * receive the result from the server
  126.  *------------------------------------------------------------------*/
  127. newData = ""
  128. do while (length(newData) < 5)
  129.    rc = SockRecv(socket,"dataChunk",1000)
  130.    say "received" length(dataChunk) "bytes"
  131.    newData = newData || dataChunk
  132.    call doSelect socket, socket2, 1
  133. end
  134.  
  135. /*------------------------------------------------------------------
  136.  * print results
  137.  *------------------------------------------------------------------*/
  138. if (reverse(data) <> newData) then
  139.    say "Unexpected results from the server: '"newData"'"
  140.  
  141. else
  142.    do
  143.    say "Received '"newData"' from" server "(successful!!)"
  144.    end
  145.  
  146. /*------------------------------------------------------------------
  147.  * close socket (and catch signals)
  148.  *------------------------------------------------------------------*/
  149. halt:
  150.  
  151. rc = SockSoClose(socket)
  152. if (rc = -1) then
  153.    do
  154.    say "Error on SockSoClose:" errno
  155.    exit
  156.    end
  157.  
  158. exit
  159.  
  160. /*------------------------------------------------------------------
  161.  * call select
  162.  *------------------------------------------------------------------*/
  163. doSelect: procedure
  164.    s.1 = arg(1)
  165.    s.2 = arg(2)
  166.    t   = arg(3)
  167.  
  168.    r.0 = 2
  169.    w.0 = 2
  170.    e.0 = 2
  171.  
  172.    do i = 1 to 2
  173.       r.i = s.i
  174.       w.i = s.i
  175.       e.i = s.i
  176.    end
  177.  
  178.    if (arg() = 2) then
  179.       rc = SockSelect("r.","w.","e.")
  180.    else
  181.       rc = SockSelect("r.","w.","e.",t)
  182.  
  183.    say "rc =" rc "from SockSelect():"
  184.    do i = 1 to r.0
  185.       say "   ready for read:  " r.i
  186.    end
  187.  
  188.    do i = 1 to w.0
  189.       say "   ready for write: " w.i
  190.    end
  191.  
  192.    do i = 1 to e.0
  193.       say "   ready for except:" e.i
  194.    end
  195.  
  196.    return ""
  197.  
  198.  
  199. /*------------------------------------------------------------------
  200.  * some simple help
  201.  *------------------------------------------------------------------*/
  202. Usage: procedure
  203.    parse source . . me .
  204.  
  205.    say "usage:"
  206.    say "   " me "<server>"
  207.    say "is used to run the rxSock tester"
  208.    say
  209.    say "where:"
  210.    say "   <server> - tcp/ip host name running test_s (default = current host)"
  211.  
  212.    exit
  213.