Diff for /libaitio/src/sock.c between versions 1.12 and 1.15

version 1.12, 2013/12/15 22:57:20 version 1.15, 2014/05/18 23:35:16
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013Copyright 2004 - 2014
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 53  io_closeClient(sched_task_t *task) Line 53  io_closeClient(sched_task_t *task)
         sock_t *s = (sock_t*) cli->cli_parent;          sock_t *s = (sock_t*) cli->cli_parent;
         int stat;          int stat;
   
           schedCancelby(s->sock_root, taskMAX, CRITERIA_ARG, cli, NULL);
   
         pthread_mutex_lock(&s->sock_mtx);          pthread_mutex_lock(&s->sock_mtx);
         TAILQ_REMOVE(&s->sock_cli, cli, cli_node);          TAILQ_REMOVE(&s->sock_cli, cli, cli_node);
         pthread_mutex_unlock(&s->sock_mtx);          pthread_mutex_unlock(&s->sock_mtx);
   
         schedCancelby(s->sock_root, taskMAX, CRITERIA_ARG, cli, NULL);  
   
         if (*cli->cli_name)          if (*cli->cli_name)
                 ioFreePTY(cli->cli_pty, cli->cli_name);                  ioFreePTY(cli->cli_pty, cli->cli_name);
         if (s->sock_prog) {          if (s->sock_prog) {
Line 211  io_rxNet(sched_task_t *task) Line 211  io_rxNet(sched_task_t *task)
         else {          else {
                 rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&cli->cli_buf[0]),                   rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&cli->cli_buf[0]), 
                                 AIT_LEN(&cli->cli_buf[0]), 0, &sa.sa, &salen);                                  AIT_LEN(&cli->cli_buf[0]), 0, &sa.sa, &salen);
                if (e_addrcmp(&cli->cli_addr, &sa, 42))                if (e_addrcmp(&cli->cli_addr, &sa, 42)) {
                        goto end;                        schedReadSelf(task);
                         taskExit(task, NULL);
                 }
         }          }
         if (rlen < 1)          if (rlen < 1)
                 schedEvent(TASK_ROOT(task), io_closeClient, cli, 0, NULL, 0);                  schedEvent(TASK_ROOT(task), io_closeClient, cli, 0, NULL, 0);
        else        else {
                 schedEvent(TASK_ROOT(task), io_txPty, cli, cli->cli_pty,                   schedEvent(TASK_ROOT(task), io_txPty, cli, cli->cli_pty, 
                                 AIT_GET_BUF(&cli->cli_buf[0]), rlen);                                  AIT_GET_BUF(&cli->cli_buf[0]), rlen);
end:                schedReadSelf(task);
        schedReadSelf(task);        }
 
         taskExit(task, NULL);          taskExit(task, NULL);
 }  }
   
Line 235  io_rxPty(sched_task_t *task) Line 238  io_rxPty(sched_task_t *task)
         rlen = read(TASK_FD(task), AIT_GET_BUF(&cli->cli_buf[1]), AIT_LEN(&cli->cli_buf[1]));          rlen = read(TASK_FD(task), AIT_GET_BUF(&cli->cli_buf[1]), AIT_LEN(&cli->cli_buf[1]));
         if (rlen < 1)          if (rlen < 1)
                 schedEvent(TASK_ROOT(task), io_closeClient, cli, 0, NULL, 0);                  schedEvent(TASK_ROOT(task), io_closeClient, cli, 0, NULL, 0);
        else        else {
                 schedEvent(TASK_ROOT(task), io_txNet, cli, cli->cli_fd,                   schedEvent(TASK_ROOT(task), io_txNet, cli, cli->cli_fd, 
                                 AIT_GET_BUF(&cli->cli_buf[1]), rlen);                                  AIT_GET_BUF(&cli->cli_buf[1]), rlen);
                   schedReadSelf(task);
           }
   
         schedReadSelf(task);  
         taskExit(task, NULL);          taskExit(task, NULL);
 }  }
   
 static void *  static void *
 io_bridgeClient(sched_task_t *task)  io_bridgeClient(sched_task_t *task)
 {  {
        int c, rlen;        int c, rlen, pty;
         pid_t pid;          pid_t pid;
         sockaddr_t sa;          sockaddr_t sa;
         socklen_t salen = sizeof sa.ss;          socklen_t salen = sizeof sa.ss;
Line 290  io_bridgeClient(sched_task_t *task) Line 294  io_bridgeClient(sched_task_t *task)
         AIT_SET_BUFSIZ(&cli->cli_buf[0], 0, AIT_LEN(&s->sock_buf));          AIT_SET_BUFSIZ(&cli->cli_buf[0], 0, AIT_LEN(&s->sock_buf));
         AIT_SET_BUFSIZ(&cli->cli_buf[1], 0, AIT_LEN(&s->sock_buf));          AIT_SET_BUFSIZ(&cli->cli_buf[1], 0, AIT_LEN(&s->sock_buf));
   
        switch ((pid = ioForkPTY(&cli->cli_pty, cli->cli_name, sizeof cli->cli_name,         switch ((pid = ioForkPTY(&pty, cli->cli_name, sizeof cli->cli_name, 
                                 NULL, NULL, NULL))) {                                  NULL, NULL, NULL))) {
                 case -1:                  case -1:
                         ELIBERR(io);                          ELIBERR(io);
                         break;                          break;
                 case 0:                  case 0:
                           cli->cli_pty = pty;
                           ioSetRAWMode(STDIN_FILENO, NULL);
   
                         array_Args(cli->cli_cmdline, 0, " \t", &args);                          array_Args(cli->cli_cmdline, 0, " \t", &args);
                         argv = array_To(args);                          argv = array_To(args);
                         array_Destroy(&args);                          array_Destroy(&args);
Line 307  io_bridgeClient(sched_task_t *task) Line 314  io_bridgeClient(sched_task_t *task)
                         _exit(rlen);                          _exit(rlen);
                         break;                          break;
                 default:                  default:
                           cli->cli_pty = pty;
                         cli->cli_pid = pid;                          cli->cli_pid = pid;
   
                         schedRead(TASK_ROOT(task), io_rxPty, cli, cli->cli_pty,                           schedRead(TASK_ROOT(task), io_rxPty, cli, cli->cli_pty, 

Removed from v.1.12  
changed lines
  Added in v.1.15


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>