kechosvr.c

最終更新:2010/3/7

kechosvr.c

001: /* kechosvr.c
002:  * エコーバックのサーバ
003:  */
004:  
005: #define USAGE "Usage: kechosvr <hostname> <port_num>"
006: 
007: #define D 1
008: 
009: #include "mysvr_stab.h"
010: #include "apr_strings.h"
011: 
012: int my_service_init (
013:   int ac
014:   , char **av
015:   , my_server_info *svr_info
016: ) {
017: 
018:   if (ac < 3) {
019:     apr_file_printf(svr_info->err, "%s\n", USAGE);
020:     return 0;
021:   }
022: 
023:   svr_info->hostname = av[1];
024:   if (!strcmp(svr_info->hostname, "NULL")) {
025:     svr_info->hostname = NULL;
026:   }
027: 
028:   if ((svr_info->port = atoi(av[2])) <= 0) {
029:     apr_file_printf(svr_info->err, "ERROR: port_num=[%s]\n", av[1]);
030:     return 0;
031:   }
032: 
033:   svr_info->timeout_sec = 10; /* 10秒でタイムアウト */
034: 
035:   return 1;
036: }
037: 
038: void my_service_finally (
039:   int error_flag
040:   , my_server_info *svr_info
041: ) {
042:   if(D)apr_file_printf(svr_info->out, "error_flag=[%d]\n", error_flag);
043: }
044: 
045: int my_service_main(
046:   apr_pool_t *pool
047:   , apr_socket_t *socket
048:   , my_server_info *svr_info
049: ) {
050:   apr_status_t rv = APR_SUCCESS;
051:   while (socket) {
052:     char buf[1024];
053:     apr_size_t len = 1024;
054:     if(D)apr_file_printf(svr_info->out, "#wait.\n");
055:     rv = apr_socket_recv(socket, buf, &len);
056:     if (rv != APR_SUCCESS) {
057:       break;
058:     }
059:     if(D)apr_file_printf(svr_info->out, "#received:[%s]\n", 
060:       apr_pmemdup(pool, buf, len));
061:     rv = apr_socket_send(socket, buf, &len);
062:     if (rv != APR_SUCCESS) {
063:       break;
064:     }
065:     
066:   }
067:   if(D)apr_file_printf(svr_info->out, "#end.\n");
068:   return 1;
069: }
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)