home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / rexx / rxsock / test_s.cmd < prev   
Encoding:
Text File  |  1993-03-11  |  4.6 KB  |  164 lines

  1. /*------------------------------------------------------------------
  2.  * test_s.cmd :
  3.  *------------------------------------------------------------------
  4.  * 08-05-92 originally by Patrick J. Mueller
  5.  *------------------------------------------------------------------*/
  6.  
  7. trace off
  8.  
  9. /*------------------------------------------------------------------
  10.  * choose the port
  11.  *------------------------------------------------------------------*/
  12. port = 923
  13.  
  14. /*------------------------------------------------------------------
  15.  * load the socket package, if needed
  16.  *------------------------------------------------------------------*/
  17. if RxFuncQuery("SockLoadFuncs") then
  18.    do
  19.    rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs")
  20.    rc = SockLoadFuncs()
  21.    end
  22.  
  23. /*------------------------------------------------------------------
  24.  * create the initial socket
  25.  *------------------------------------------------------------------*/
  26. s  = SockSocket("AF_INET","SOCK_STREAM",0)
  27. if (s = -1) then
  28.    do
  29.    say "Error on SockSocket:" errno
  30.    exit
  31.    end
  32.  
  33. /*------------------------------------------------------------------
  34.  * catch breaks
  35.  *------------------------------------------------------------------*/
  36. signal on halt
  37.  
  38. /*------------------------------------------------------------------
  39.  * bind socket to port
  40.  *------------------------------------------------------------------*/
  41. server.!family = "AF_INET"
  42. server.!port   = port
  43. server.!addr   = "INADDR_ANY"
  44.  
  45. rc = SockBind(s,"server.!")
  46. if (rc = -1) then
  47.    do
  48.    say "Error on SockBind:" errno
  49.    exit
  50.    end
  51.  
  52. /*------------------------------------------------------------------
  53.  * set queue size
  54.  *------------------------------------------------------------------*/
  55. rc = SockListen(s,10)
  56. if (rc = -1) then
  57.    do
  58.    say "Error on SockListen:" errno
  59.    exit
  60.    end
  61.  
  62. /*------------------------------------------------------------------
  63.  * infinite loop to handle requests ...
  64.  *------------------------------------------------------------------*/
  65. do forever
  66.    say "Waiting for client"
  67.  
  68.    /*---------------------------------------------------------------
  69.     * accept a connection
  70.     *---------------------------------------------------------------*/
  71.    ns = SockAccept(s,"client.!")
  72.    if (rc = -1) then
  73.       do
  74.       say "Error on SockAccept:" errno
  75.       exit
  76.       end
  77.  
  78.    /*---------------------------------------------------------------
  79.     * get clients host name
  80.     *---------------------------------------------------------------*/
  81.    if SockGetHostByAddr(client.!addr,"host.!") then
  82.       clientName = host.!name
  83.    else
  84.       clientName = "Unknown"
  85.  
  86.    say "Accepted client:" client.!addr clientName
  87.  
  88.    /*---------------------------------------------------------------
  89.     * get peer host name
  90.     *---------------------------------------------------------------*/
  91.    rc = SockGetPeerName(ns,"peer.!")
  92.    if (rc = -1) then
  93.       do
  94.       say "Error on SockGetPeerName:" errno
  95.       exit
  96.       end
  97.  
  98.    say "PeerName:" peer.!addr
  99.  
  100.    /*---------------------------------------------------------------
  101.     * get socket host name
  102.     *---------------------------------------------------------------*/
  103.    rc = SockGetSockName(ns,"sock.!")
  104.    if (rc = -1) then
  105.       do
  106.       say "Error on SockGetSockName:" errno
  107.       exit
  108.       end
  109.  
  110.    say "SockName:" sock.!addr
  111.  
  112.    /*---------------------------------------------------------------
  113.     * receive data from client
  114.     *---------------------------------------------------------------*/
  115.    rc = SockRecv(ns,"data",1000)
  116.    if (rc = -1) then
  117.       do
  118.       say "Error on SockRecv:" errno
  119.       exit
  120.       end
  121.  
  122.    say "Received:" data
  123.  
  124.    data = reverse(data)
  125.  
  126.    /*---------------------------------------------------------------
  127.     * send data back
  128.     *---------------------------------------------------------------*/
  129.    rc = SockSend(ns,data)
  130.    if (rc = -1) then
  131.       do
  132.       say "Error on SockSend:" errno
  133.       exit
  134.       end
  135.  
  136.    /*---------------------------------------------------------------
  137.     * close the new socket from client
  138.     *---------------------------------------------------------------*/
  139.    rc = SockSoClose(ns)
  140.    ns = ""
  141.    if (rc = -1) then
  142.       do
  143.       say "Error on SockSoClose:" errno
  144.       exit
  145.       end
  146.  
  147.    say "Closing connection"
  148.    say
  149. end
  150.  
  151. /*------------------------------------------------------------------
  152.  * handle break by closing sockets
  153.  *------------------------------------------------------------------*/
  154. halt:
  155.  
  156. say
  157. say "Quitting ..."
  158.  
  159. rc = SockSoClose(s)
  160.  
  161. if datatype(ns,"W") then
  162.    rc = SockSoClose(ns)
  163.  
  164.