X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fmemcp.cc;h=59bd7478bb780a89d447d9c8949b1381c7342baa;hb=cb08b8d0a35a78bde8a5b4caccab5dd2d789cca3;hp=384622139e2990c008c4bb52db88c95186d8d2c2;hpb=aabc9fc24b965a3ac14bce9fd033aaba012c494b;p=m6w6%2Flibmemcached diff --git a/clients/memcp.cc b/clients/memcp.cc index 38462213..59bd7478 100644 --- a/clients/memcp.cc +++ b/clients/memcp.cc @@ -42,6 +42,8 @@ static void options_parse(int argc, char *argv[]); static bool opt_binary= false; +static bool opt_udp= false; +static bool opt_buffer= false; static int opt_verbose= 0; static char *opt_servers= NULL; static char *opt_hash= NULL; @@ -85,6 +87,37 @@ int main(int argc, char *argv[]) initialize_sockets(); memcached_st *memc= memcached_create(NULL); + + if (opt_udp) + { + if (opt_verbose) + { + std::cout << "Enabling UDP" << std::endl; + } + + if (memcached_failed(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_USE_UDP, opt_udp))) + { + memcached_free(memc); + std::cerr << "Could not enable UDP protocol." << std::endl; + return EXIT_FAILURE; + } + } + + if (opt_buffer) + { + if (opt_verbose) + { + std::cout << "Enabling MEMCACHED_BEHAVIOR_BUFFER_REQUESTS" << std::endl; + } + + if (memcached_failed(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, opt_buffer))) + { + memcached_free(memc); + std::cerr << "Could not enable MEMCACHED_BEHAVIOR_BUFFER_REQUESTS." << std::endl; + return EXIT_FAILURE; + } + } + process_hash_option(memc, opt_hash); if (opt_servers == NULL) @@ -114,9 +147,7 @@ int main(int argc, char *argv[]) memcached_server_push(memc, servers); memcached_server_list_free(servers); - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, - (uint64_t)opt_binary); - + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, opt_binary); if (opt_username and LIBMEMCACHED_WITH_SASL_SUPPORT == 0) { memcached_free(memc); @@ -180,7 +211,7 @@ int main(int argc, char *argv[]) } ssize_t read_length; - if ((read_length= read(fd, file_buffer_ptr, (size_t)sbuf.st_size)) == -1) + if ((read_length= ::read(fd, file_buffer_ptr, (size_t)sbuf.st_size)) == -1) { std::cerr << "Error while reading file " << file_buffer_ptr << " (" << strerror(errno) << ")" << std::endl; exit(EXIT_FAILURE); @@ -212,17 +243,22 @@ int main(int argc, char *argv[]) opt_expires, opt_flags); } - if (rc != MEMCACHED_SUCCESS) + if (memcached_failed(rc)) { - std::cerr << "Error occrrured during operation: " << memcached_last_error_message(memc) << std::endl; + std::cerr << "Error occrrured during memcached_set(): " << memcached_last_error_message(memc) << std::endl; exit_code= EXIT_FAILURE; } - free(file_buffer_ptr); - close(fd); + ::free(file_buffer_ptr); + ::close(fd); optind++; } + if (opt_verbose) + { + std::cout << "Calling memcached_free()" << std::endl; + } + memcached_free(memc); if (opt_servers) @@ -250,6 +286,8 @@ static void options_parse(int argc, char *argv[]) {(OPTIONSTRING)"version", no_argument, NULL, OPT_VERSION}, {(OPTIONSTRING)"help", no_argument, NULL, OPT_HELP}, {(OPTIONSTRING)"quiet", no_argument, NULL, OPT_QUIET}, + {(OPTIONSTRING)"udp", no_argument, NULL, OPT_UDP}, + {(OPTIONSTRING)"buffer", no_argument, NULL, OPT_BUFFER}, {(OPTIONSTRING)"verbose", no_argument, &opt_verbose, OPT_VERBOSE}, {(OPTIONSTRING)"debug", no_argument, &opt_verbose, OPT_DEBUG}, {(OPTIONSTRING)"servers", required_argument, NULL, OPT_SERVERS}, @@ -357,6 +395,14 @@ static void options_parse(int argc, char *argv[]) close_stdio(); break; + case OPT_UDP: + opt_udp= true; + break; + + case OPT_BUFFER: + opt_buffer= true; + break; + case '?': /* getopt_long already printed an error message. */ exit(1);