1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include "pal.h"
- #include "pal_debug.h"
- int main (int argc, char ** argv)
- {
- if (argc < 2) {
- pal_printf("specify the port to open\n");
- return 0;
- }
- char uri[60];
- pal_snprintf(uri, 60, "tcp.srv:127.0.0.1:%s", argv[1]);
- PAL_HANDLE srv = DkStreamOpen(uri, PAL_ACCESS_RDWR, 0,
- PAL_CREAT_TRY, 0);
- if (srv == NULL) {
- pal_printf("DkStreamOpen failed\n");
- return -1;
- }
- void * buffer = DkVirtualMemoryAlloc(NULL, 4096, 0,
- PAL_PROT_READ|PAL_PROT_WRITE);
- if (buffer == NULL) {
- 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;
- }
|