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) |