コード例 #1
0
ファイル: tserver1.c プロジェクト: BillyJoy/unp2
void
server(void *cookie, char *argp, size_t arg_size,
       door_desc_t *dp, size_t n_descriptors)
{
    long	*arg, result[4];
    door_cred_t	info;

    if (argp == DOOR_UNREF_DATA) {
        printf("door unreferenced\n");
        Door_return(NULL, 0, NULL, 0);
    }

    printf("server called, thread id %ld, %d bytes of arguments, cookie = %p\n",
           pr_thread_id(NULL), arg_size, cookie);
    sleep(3);
    Door_cred(&info);
    printf("euid = %ld, ruid = %ld, pid = %ld\n",
           (long) info.dc_euid, (long) info.dc_ruid, (long) info.dc_pid);

    arg = (long *) argp;
    printf("arg[0] = %ld, arg[1] = %ld, arg[2] = %ld, arg[3]= %ld\n\n",
           arg[0], arg[1], arg[2], arg[3]);

    result[0] = arg[0] * arg[0];
    result[1] = arg[1] * arg[1];
    result[2] = arg[2] * arg[2];
    result[3] = arg[3] * arg[3];
    Door_return((char *) result, sizeof(result), NULL, 0);
}
コード例 #2
0
ファイル: lat_door.c プロジェクト: piaoyimq/CppSpace
void
server(void *cookie, char *argp, size_t arg_size,
       door_desc_t *dp, size_t n_descriptors)
{
    char	c;

    Door_return(&c, sizeof(char), NULL, 0);
}
コード例 #3
0
ファイル: server2.c プロジェクト: BigR-Lab/CodeRes_Cpp
void
servproc(void *cookie, char *dataptr, size_t datasize,
		 door_desc_t *descptr, size_t ndesc)
{
	long	arg, result;
	
	arg = *((long *) dataptr);
	result = arg * arg;
	Door_return((char *) &result, sizeof(result), NULL, 0);
}
コード例 #4
0
ファイル: serverunref2.c プロジェクト: piaoyimq/CppSpace
void
servproc(void *cookie, char *dataptr, size_t datasize,
		 door_desc_t *descptr, size_t ndesc)
{
	long	arg, result;
	
	if (dataptr == DOOR_UNREF_DATA) {
		printf("door unreferenced\n");
		Door_return(NULL, 0, NULL, 0);
	}
	
	arg = *((long *) dataptr);
	printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);
	sleep(6);

	result = arg * arg;
	printf("thread id %ld returning\n", pr_thread_id(NULL));
	Door_return((char *) &result, sizeof(result), NULL, 0);
}
コード例 #5
0
ファイル: server9.c プロジェクト: BigR-Lab/CodeRes_Cpp
void
servproc(void *cookie, char *dataptr, size_t datasize,
		 door_desc_t *descptr, size_t ndesc)
{
	long	arg, result;
	
	Door_revoke(*((int *) cookie));
	arg = *((long *) dataptr);
	printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);

	result = arg * arg;
	Door_return((char *) &result, sizeof(result), NULL, 0);
}
コード例 #6
0
ファイル: serverintr3.c プロジェクト: BigR-Lab/CodeRes_Cpp
void
servproc(void *cookie, char *dataptr, size_t datasize,
		 door_desc_t *descptr, size_t ndesc)
{
	long	arg, result;
	
	printf("thread id %ld called\n", pr_thread_id(NULL));
	sleep(6);		/* let client catch SIGCHLD */
	arg = *((long *) dataptr);
	result = arg * arg;
	printf("thread id %ld returning\n", pr_thread_id(NULL));
	Door_return((char *) &result, sizeof(result), NULL, 0);
}
コード例 #7
0
ファイル: tserver1.c プロジェクト: BillyJoy/unp2
void *
my_thread(void *arg)
{
    int		oldstate;

    if (arg == server) {
        while (fd == -1)
            thr_yield();

        pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &oldstate);
        Door_bind(fd);
        Door_return(NULL, 0, NULL, 0);
    } else
        err_quit("my_thread: unknown function");
    return(NULL);	/* never executed */
}
コード例 #8
0
ファイル: serverintr4.c プロジェクト: BigR-Lab/CodeRes_Cpp
void
servproc(void *cookie, char *dataptr, size_t datasize,
		 door_desc_t *descptr, size_t ndesc)
{
	int		oldstate, junk;
	long	arg, result;
	
	Pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &oldstate);
	pthread_cleanup_push(servproc_cleanup, NULL);
	sleep(6);
	arg = *((long *) dataptr);
	result = arg * arg;
	pthread_cleanup_pop(0);
	Pthread_setcancelstate(oldstate, &junk);
	Door_return((char *) &result, sizeof(result), NULL, 0);
}