Esempio n. 1
0
/* ********************** */
JNIEXPORT jint JNICALL
Java_OnloadExt_MoveFd__I (JNIEnv* env, jclass cls, jint fd_val)
{
  if ( !Java_OnloadExt_IsPresent(env, cls) )
    return -ENOSYS;
  return (jint) onload_move_fd(fd_val);
}
Esempio n. 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);
}