Пример #1
0
/*
    void loader::load(pool_entry & entry, request_rec* r) {
        cout << "loader::load" << endl;
        auto_ptr<dso_code> code( new dso_code(r->filename, r->finfo.mtime) );
        entry.servlet = create_servlet(code.get());
        entry.handle = code.release();
    }
*/
HttpServlet* loader::create_servlet(dso_code* code) {
//         cout << "loader::create_servlet" << endl;
    auto_ptr<HttpServlet> servlet( code->call<HttpServlet*>("create") );
    if (!servlet.get())
        throw runtime_error("Error loading servlet module. Servlet creation function returned NULL. ");
    servlet->init();
    return servlet.release();
}
Пример #2
0
int main(int argc, char *argv[])
{
    //char buffer[BUFFER_SIZE];
    int sockfd, newsockfd, portno, pid;
    socklen_t clilen;
    struct sockaddr_in serv_addr, cli_addr;

    /*    if (argc < 2) { */
    /*     fprintf(stderr,"ERROR, no port provided\n"); */
    /*     exit(1); */
    /* } */

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0){
        perror("ERROR opening socket");
        exit(1);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    //    portno = atoi(argv[1]);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(PORTNO);
    if (bind(sockfd, (struct sockaddr *) &serv_addr,
        sizeof(serv_addr)) < 0){
     perror("ERROR on binding");
     exit(1);
    }
    listen(sockfd,5);
    clilen = sizeof(cli_addr);
    while (1) {
        newsockfd = accept(sockfd,
            (struct sockaddr *) &cli_addr, &clilen);
        if (newsockfd < 0){
            perror("ERROR on accept");
            exit(1);
        }
        pid = fork();
        if (pid < 0){
            perror("ERROR on fork");
            exit(1);
        }
        if (pid == 0) {
            close(sockfd);
            servlet(newsockfd);
            exit(0);
        }
        //make sure to wait at some point to avoid zombies
        else close(newsockfd);
        waitpid(-1, NULL, WNOHANG);
    }
    close(sockfd);
    return 0; 
}
Пример #3
0
void master_service::on_accept(acl::socket_stream& conn)
{
	logger("connect from %s, fd %d", conn.get_peer(), conn.sock_handle());

	conn.set_rw_timeout(30);

	acl::memcache_session session("127.0.0.1:11211");
	http_servlet servlet(&conn, &session);

	// charset: big5, gb2312, gb18030, gbk, utf-8
	servlet.setLocalCharset("utf-8");

	while(servlet.doRun()) {}

	logger("disconnect from %s", conn.get_peer());
}
Пример #4
0
static void http_server(ACL_VSTREAM *cstream)
{
	ACL_EVENT *event = (ACL_EVENT *) cstream->context;
	acl::socket_stream conn;

	conn.open(cstream);
	acl::memcache_session session("127.0.0.1:11211");
	http_servlet servlet(&conn, &session);
	servlet.setLocalCharset("gb2312");

	if (servlet.doRun() == false)
		return;

	conn.unbind();
	acl_event_enable_read(event, cstream, 120, client_callback, NULL);
}
Пример #5
0
	// @override
	void on_accept(acl::socket_stream& conn)
	{
		acl_msg_info(">>>accept connection: %d", conn.sock_handle());
		conn.set_rw_timeout(0);
		acl::memcache_session session("127.0.0.1:11211");
		http_servlet servlet(&conn, &session);
		servlet.setLocalCharset("gb2312");

		while (true)
		{
			if (servlet.doRun() == false)
				break;
		}

		acl_msg_info(">>>close one connection: %d, %s",
			conn.sock_handle(), acl::last_serror());
	}
Пример #6
0
static void http_server(FIBER *, void *ctx)
{
	acl::socket_stream *conn = (acl::socket_stream *) ctx;

	printf("start one http_server\r\n");

	acl::memcache_session session("127.0.0.1:11211");
	http_servlet servlet(conn, &session);
	servlet.setLocalCharset("gb2312");

	while (true)
	{
		if (servlet.doRun() == false)
			break;
	}

	printf("close one connection: %d, %s\r\n", conn->sock_handle(),
		acl::last_serror());
	delete conn;
}
Пример #7
0
/*---------------------------------------------------------------------*/
main(int count, char *strings[])
{   int sd, pid;
	struct sockaddr_in addr;
	struct sigaction act;

	if ( count != 2 )
	{
		printf("usage: %s <port>\n", strings[0]);
		exit(0);
	}
	bzero(&act, sizeof(act));
	act.sa_handler = sig_child;
	act.sa_flags = SA_NOCLDSTOP | SA_RESTART;
	if ( sigaction(SIGCHLD, &act, 0) != 0 )
		perror("sigaction()");
	sd = socket(PF_INET, SOCK_STREAM, 0);
	bzero(&addr, sizeof(addr));
	addr.sin_family = AF_INET;
	addr.sin_port = htons(atoi(strings[1]));
	addr.sin_addr.s_addr = INADDR_ANY;
	if ( bind(sd, (struct sockaddr*)&addr, sizeof(addr)) == 0 )
	{
		listen(sd, 15);
	    for (;;)
    	{
        	if ( ChildCount < MAXPROCESSES )
	        {
    	        if ( (pid = fork()) == 0 ) /*---CHILD---*/
					servlet(sd);
    	        else if ( pid > 0 )        /*---PARENT---*/
        	        ChildCount++;
	            else                       /*---ERROR---*/
    	            perror("fork() failed");
        	}
	        else
    	        sleep(1); /*--- OR, sched_yield()---*/
	    }
	}
	else
		perror("bind()");
}