/* ********************** */ 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); }
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); }