int main(void)
{
  int s1;
  int s2;
  int r;
  struct onload_stat * stat;
  struct sockaddr_in servaddr;

  stat = malloc(sizeof(struct onload_stat));

  /* new sockets created in this thread will not be accelerated */
  if( onload_set_stackname(ONLOAD_THIS_THREAD, ONLOAD_SCOPE_THREAD,
                           ONLOAD_DONT_ACCELERATE) )
    perror("Error setting stackname:");

  /* set up a basic UDP socket */
  s1 = socket(AF_INET, SOCK_DGRAM, 0);
  r = onload_fd_stat(s1, stat);
  outputStatInfo(r, stat);
  close(s1);

  /* revert to accelerating sockets */
  if( onload_set_stackname(ONLOAD_ALL_THREADS, ONLOAD_SCOPE_NOCHANGE, "") )
    perror("Error setting stackname:");

  /* set up a basic UDP socket */
  s1 = socket(AF_INET, SOCK_DGRAM, 0);
  r = onload_fd_stat(s1, stat);
  outputStatInfo(r, stat);
  close(s1);

  /* give the stack a name */
  if( onload_set_stackname(ONLOAD_ALL_THREADS, ONLOAD_SCOPE_GLOBAL, "s_name") )
    perror("Error setting stackname:");

  /* set up two basic UDP sockets */
  s1 = socket(AF_INET, SOCK_DGRAM, 0);
  r = onload_fd_stat(s1, stat);
  outputStatInfo(r, stat);
  s2 = socket(AF_INET, SOCK_DGRAM, 0);
  r = onload_fd_stat(s2, stat);
  outputStatInfo(r, stat);
  close(s1);
  close(s2);

  /* tidy up */
  free(stat);
}
Exemple #2
0
static void do_server(void)
{
    int sl;
    int sa1;
    int sa2;
    int r;
    int i;
    struct onload_stat * stat;
    struct sockaddr_in saddr;

    stat = malloc(sizeof(struct onload_stat));

    /* create a named stack for the socket */
    if( onload_set_stackname(ONLOAD_ALL_THREADS, ONLOAD_SCOPE_GLOBAL, "initial") )
        perror("Error setting stackname:");

    /* set up a basic listening TCP socket */
    sl = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&saddr, sizeof(saddr));
    saddr.sin_family      = AF_INET;
    saddr.sin_addr.s_addr = htonl(INADDR_ANY);
    saddr.sin_port        = htons(20001);
    bind(sl, (struct sockaddr *) &saddr, sizeof(saddr));
    listen(sl, 10);

    /* accept the first connection */
    printf("Accepting first connection\n");
    sa1 = accept(sl, (struct sockaddr *) NULL, NULL);
    r = onload_fd_stat(sa1, stat);
    outputStatInfo(r, stat);

    /* create a new named stack to move the socket to */
    if( onload_set_stackname(ONLOAD_ALL_THREADS, ONLOAD_SCOPE_GLOBAL, "stack1") )
        perror("Error setting stackname:");

    /* move the socket into the current (stack1) stack */
    printf("Moving first connection\n");
    onload_move_fd(sa1);
    r = onload_fd_stat(sa1, stat);
    outputStatInfo(r, stat);

    /* accept the second connection */
    printf("Accepting second connection\n");
    sa2 = accept(sl, (struct sockaddr *) NULL, NULL);
    r = onload_fd_stat(sa2, stat);
    outputStatInfo(r, stat);

    /* create a new named stack to move the socket to */
    if( onload_set_stackname(ONLOAD_ALL_THREADS, ONLOAD_SCOPE_GLOBAL, "stack2") )
        perror("Error setting stackname:");

    /* move the socket into the current (stack2) stack */
    printf("Moving second connection\n");
    onload_move_fd(sa2);
    r = onload_fd_stat(sa2, stat);
    outputStatInfo(r, stat);

    /* tidy up */
    close(sl);
    close(sa1);
    close(sa2);
    free(stat);
}