kechosvr.c
最終更新:2010/3/7
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: }
KAKU PROJECT (2009) |