Diff for /libaitio/src/sock.c between versions 1.11 and 1.11.2.3

version 1.11, 2013/12/03 18:58:22 version 1.11.2.3, 2013/12/12 21:17:53
Line 61  io_closeClient(sched_task_t *task) Line 61  io_closeClient(sched_task_t *task)
   
         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) {
                   io_progDetach(s->sock_prog, cli->cli_pty);
                   cli->cli_pty ^= cli->cli_pty;
           }
   
         if (s->sock_type == SOCK_STREAM) {          if (s->sock_type == SOCK_STREAM) {
                 shutdown(cli->cli_fd, SHUT_RDWR);                  shutdown(cli->cli_fd, SHUT_RDWR);
Line 311  end: Line 315  end:
         taskExit(task, NULL);          taskExit(task, NULL);
 }  }
   
   static void *
   io_bridgeClient2Pool(sched_task_t *task)
   {
           int c, rlen;
           sockaddr_t sa;
           socklen_t salen = sizeof sa.ss;
           sock_cli_t *cli = NULL;
           sock_t *s = (sock_t*) TASK_ARG(task);
   
           if (s->sock_type == SOCK_STREAM) {
                   if ((c = accept(TASK_FD(task), &sa.sa, &salen)) == -1) {
                           LOGERR;
                           goto end;
                   }
           } else {
                   if ((rlen = recvfrom(TASK_FD(task), 
                                                   AIT_GET_BUF(&s->sock_buf), AIT_LEN(&s->sock_buf), 
                                                   MSG_PEEK, &sa.sa, &salen)) == -1) {
                           LOGERR;
                           goto end;
                   } else
                           c = TASK_FD(task);
           }
   
           cli = e_malloc(sizeof(sock_cli_t));
           if (!cli) {
                   io_SetErr(elwix_GetErrno(), "%s", elwix_GetError());
                   if (s->sock_type == SOCK_STREAM)
                           close(c);
                   goto end;
           } else {
                   memset(cli, 0, sizeof(sock_cli_t));
                   pthread_mutex_lock(&s->sock_mtx);
                   TAILQ_INSERT_TAIL(&s->sock_cli, cli, cli_node);
                   pthread_mutex_unlock(&s->sock_mtx);
           }
   
           cli->cli_parent = TASK_ARG(task);
           cli->cli_fd = c;
           cli->cli_pty = io_progAttach(s->sock_prog, 42);
           strlcpy(cli->cli_cmdline, TASK_DATA(task), sizeof cli->cli_cmdline);
           memcpy(&cli->cli_addr, &sa, sizeof cli->cli_addr);
           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));
   
           schedRead(TASK_ROOT(task), io_rxPty, cli, cli->cli_pty, TASK_ARG(task), 0);
           schedRead(TASK_ROOT(task), io_rxNet, cli, cli->cli_fd, TASK_ARG(task), 0);
           ioUpdTimerSocket(cli);
   end:
           schedReadSelf(task);
           taskExit(task, NULL);
   }
   
   
 /*  /*
  * ioInitSocket() - Init socket and allocate resources   * ioInitSocket() - Init socket and allocate resources
  *   *
Line 517  ioUpdTimerSocket(sock_cli_t * __restrict c) Line 574  ioUpdTimerSocket(sock_cli_t * __restrict c)
         else          else
                 s = c->cli_parent;                  s = c->cli_parent;
   
           if (s->sock_prog)
                   io_progCheck(s->sock_prog, 42);
   
         schedCancelby(s->sock_root, taskTIMER, CRITERIA_ARG, c, NULL);          schedCancelby(s->sock_root, taskTIMER, CRITERIA_ARG, c, NULL);
         schedTimer(s->sock_root, io_closeClient, c, s->sock_timeout, NULL, 0);          schedTimer(s->sock_root, io_closeClient, c, s->sock_timeout, NULL, 0);
 }  }
Line 570  ioBridgeProg2Socket(sock_t * __restrict s, const char  Line 630  ioBridgeProg2Socket(sock_t * __restrict s, const char 
         if (!s || !prgname || s->sock_kill)          if (!s || !prgname || s->sock_kill)
                 return -1;                  return -1;
   
        schedRead(s->sock_root, io_bridgeClient, s, s->sock_fd, (void*) prgname, 0);        schedRead(s->sock_root, s->sock_prog ? io_bridgeClient2Pool : io_bridgeClient, 
                         s, s->sock_fd, (void*) prgname, 0);
         return schedRun(s->sock_root, &s->sock_kill);          return schedRun(s->sock_root, &s->sock_kill);
   }
   
   /*
    * ioSetupProg2Socket() - Setup program pool to socket server
    *
    * @s = Socket
    * @p = Program pool
    * return: -1 error or 0 ok
    */
   int
   ioSetupProg2Socket(sock_t * __restrict s, prog_t * __restrict p)
   {
           if (!s)
                   return -1;
   
           s->sock_prog = p;
           return 0;
 }  }

Removed from v.1.11  
changed lines
  Added in v.1.11.2.3


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