| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | 
							- /* The server test program that accept multiple TCP connection at the same
 
-  * time. A port number is taken as argument. If a port is locked up, try
 
-  * another one.
 
-  *
 
-  * Run this progam with a simple tcp client, like netcat.  For instance:
 
-  *
 
-  * Start the server:
 
-  *  ../src/libpal.so file:./Server.manifest 4000
 
-  *
 
-  *
 
-  * Run the client:
 
-  *   nc localhost 4000
 
-  *   [ type strings here, see them appear on the console ]
 
-  */
 
- #include "pal.h"
 
- #include "pal_debug.h"
 
- #include "api.h"
 
- int main (int argc, char ** argv)
 
- {
 
-     if (argc < 2) {
 
-         pal_printf("specify the port to open\n");
 
-         return 0;
 
-     }
 
-     char uri[60];
 
-     snprintf(uri, 60, "tcp.srv:127.0.0.1:%s", argv[1]);
 
-     PAL_HANDLE srv = DkStreamOpen(uri, PAL_ACCESS_RDWR, 0,
 
-                                   PAL_CREATE_TRY, 0);
 
-     if (srv == NULL) {
 
-         pal_printf("DkStreamOpen failed\n");
 
-         return -1;
 
-     }
 
-     void * buffer = (void *) DkVirtualMemoryAlloc(NULL, 4096, 0,
 
-                                                   PAL_PROT_READ|PAL_PROT_WRITE);
 
-     if (!buffer) {
 
-         pal_printf("DkVirtualMemoryAlloc failed\n");
 
-         return -1;
 
-     }
 
-     PAL_HANDLE hdls[8];
 
-     int nhdls = 1, i;
 
-     hdls[0] = srv;
 
-     while(1) {
 
-         PAL_HANDLE hdl = DkObjectsWaitAny(nhdls, hdls, NO_TIMEOUT);
 
-         if (!hdl)
 
-             continue;
 
-         if (hdl == srv) {
 
-             hdl = DkStreamWaitForClient(srv);
 
-             if (!hdl)
 
-                 continue;
 
-             if (nhdls >= 8) {
 
-                 pal_printf("[ ] connection rejected\n");
 
-                 DkObjectClose(hdl);
 
-                 continue;
 
-             }
 
-             pal_printf("[%d] receive new connection\n", nhdls);
 
-             hdls[nhdls++] = hdl;
 
-             continue;
 
-         }
 
-         int cnt = 0;
 
-         for (i = 0 ; i < nhdls ; i++)
 
-             if (hdls[i] == hdl)
 
-                 cnt = i;
 
-         int bytes = DkStreamRead(hdl, 0, 4096, buffer, NULL, 0);
 
-         if (bytes == 0) {
 
-             DkObjectClose(hdls[cnt]);
 
-             if (cnt != nhdls - 1)
 
-                 hdls[cnt] = hdls[nhdls - 1];
 
-             nhdls--;
 
-             continue;
 
-         }
 
-         ((char *) buffer)[bytes] = 0;
 
-         pal_printf("[%d] %s", cnt, (char *) buffer);
 
-     }
 
-     return 0;
 
- }
 
 
  |