예제 #1
0
파일: rich_schema.c 프로젝트: vaughan0/vlib
static void bound_sink_close(void* _self) {
  BoundSink* self = _self;
  coroutine_close(self->co);
  call(self->schema, close_value, self->to);
  call(self->schema, close);
  free(self);
}
예제 #2
0
int main(void) 
{
	struct schedule * S = coroutine_open();
	test(S);
	coroutine_close(S);
	
	return 0;
}
예제 #3
0
파일: rich_json.c 프로젝트: vaughan0/vlib
static void json_sink_sink(void* _self, rich_Atom atom, void* atom_data) {
  JSONSink* self = _self;
  SinkArg arg = {
    .out = self->out,
    .atom = atom,
    .data = atom_data,
  };
  coroutine_run(self->co, &arg);
}
static void json_sink_close(void* _self) {
  JSONSink* self = _self;
  coroutine_close(self->co);
  call(self->out, close);
  free(self);
}
예제 #4
0
int main()
{
	int listenfd, optval = 1;
	int i;
	int port = 9500;
	struct sockaddr_in serveraddr;
	listenfd = socket(AF_INET, SOCK_STREAM, 0);
	setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int));

	bzero((char *) &serveraddr, sizeof(serveraddr));
    serveraddr.sin_family = AF_INET; 
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serveraddr.sin_port = htons((unsigned short)port);

    bind(listenfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));

    listen(listenfd, 1024);

    make_socket_non_blocking(listenfd);

    struct schedule * S = coroutine_open();
    printf("start..\n");
    int co1 = coroutine_new(S, acceptfun, (void *)&listenfd);
    printf("%d\n", S->cap);
    printf("%d\n", co1);
    for(i = 0; i < S->cap; i++) {
    	if(coroutine_status(S, i)) {
    		coroutine_resume(S,i);
    	}
    	if(i == S->cap - 1)
    		i = -1;
    }
    coroutine_close(S);
    close(listenfd);
    return 0;
}