nutcracker 0.2.3 → 0.2.4.beta1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +53 -5
- data/Rakefile +14 -19
- data/bin/nutcracker +6 -1
- data/ext/nutcracker/ChangeLog +9 -0
- data/ext/nutcracker/LICENSE +0 -0
- data/ext/nutcracker/Makefile +643 -0
- data/ext/nutcracker/Makefile.am +0 -0
- data/ext/nutcracker/Makefile.in +66 -149
- data/ext/nutcracker/NOTICE +0 -0
- data/ext/nutcracker/README.md +13 -11
- data/ext/nutcracker/aclocal.m4 +112 -201
- data/ext/nutcracker/autom4te.cache/output.0 +18664 -0
- data/ext/nutcracker/autom4te.cache/output.1 +18664 -0
- data/ext/nutcracker/autom4te.cache/output.2 +18664 -0
- data/ext/nutcracker/autom4te.cache/requests +494 -0
- data/ext/nutcracker/autom4te.cache/traces.0 +2415 -0
- data/ext/nutcracker/autom4te.cache/traces.1 +945 -0
- data/ext/nutcracker/autom4te.cache/traces.2 +2415 -0
- data/ext/nutcracker/conf/nutcracker.leaf.yml +0 -0
- data/ext/nutcracker/conf/nutcracker.root.yml +0 -0
- data/ext/nutcracker/conf/nutcracker.yml +0 -0
- data/ext/nutcracker/config.h +332 -0
- data/ext/nutcracker/config.h.in +15 -0
- data/ext/nutcracker/config.log +2684 -0
- data/ext/nutcracker/config.status +2317 -0
- data/ext/nutcracker/config/config.guess +23 -84
- data/ext/nutcracker/config/config.sub +23 -93
- data/ext/nutcracker/config/depcomp +35 -81
- data/ext/nutcracker/config/install-sh +109 -122
- data/ext/nutcracker/config/ltmain.sh +1053 -721
- data/ext/nutcracker/config/missing +20 -29
- data/ext/nutcracker/configure +2122 -2320
- data/ext/nutcracker/configure.ac +35 -3
- data/ext/nutcracker/contrib/Makefile +494 -0
- data/ext/nutcracker/contrib/Makefile.am +0 -0
- data/ext/nutcracker/contrib/Makefile.in +41 -107
- data/ext/nutcracker/contrib/yaml-0.1.4.tar.gz +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/Makefile +736 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.0 +13102 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.1 +13085 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/output.2 +13085 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/requests +476 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.0 +2339 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.1 +545 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/autom4te.cache/traces.2 +2339 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.h +81 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.h.in~ +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.log +688 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/config.status +2032 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/annotated.html +51 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/bc_s.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/classes.html +41 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/closed.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/doxygen.css +656 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/doxygen.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/files.html +40 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x62.html +84 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x63.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x64.html +83 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x65.html +110 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x66.html +79 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x68.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x69.html +92 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6b.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6c.html +88 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6d.html +96 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6e.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x6f.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x70.html +100 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x71.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x72.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x73.html +163 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x74.html +115 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x75.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x76.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_0x77.html +77 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x62.html +84 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x63.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x64.html +83 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x65.html +110 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x66.html +79 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x68.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x69.html +92 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6b.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6c.html +88 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6d.html +96 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6e.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x6f.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x70.html +100 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x71.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x72.html +87 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x73.html +163 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x74.html +115 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x75.html +71 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x76.html +80 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/functions_vars_0x77.html +77 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals.html +667 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_defs.html +81 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_enum.html +78 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_eval.html +373 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_func.html +196 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/globals_type.html +126 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__basic.html +320 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__emitter.html +819 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__events.html +664 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__export.html +60 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__nodes.html +795 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__parser.html +606 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__styles.html +222 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__tokens.html +246 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/group__version.html +106 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/index.html +31 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/modules.html +42 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/nav_f.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/nav_h.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/open.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__alias__data__s.html +108 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__document__s.html +235 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__emitter__s.html +1300 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__event__s.html +496 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__mark__s.html +108 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__node__pair__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__node__s.html +420 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__parser__s.html +1229 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__simple__key__s.html +97 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__tag__directive__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__token__s.html +413 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/structyaml__version__directive__s.html +91 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_a.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_b.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_h.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tab_s.png +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/tabs.css +59 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/doc/html/yaml_8h.html +525 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/include/Makefile.am +17 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/include/Makefile.in +470 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/libtool +8890 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/Makefile +484 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/api.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/api.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/dumper.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/emitter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/libyaml.la +41 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/loader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/parser.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/reader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/scanner.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.lo +12 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/src/writer.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/stamp-h1 +1 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/Makefile +675 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor-alt.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-deconstructor.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter-alt.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/example-reformatter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-dumper.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-emitter.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-loader.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-parser.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/tests/run-scanner.o +0 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/yaml-0.1.pc +10 -0
- data/ext/nutcracker/contrib/yaml-0.1.4/yaml-0.1.pc.in +10 -0
- data/ext/nutcracker/extconf.rb +0 -5
- data/ext/nutcracker/libtool +9403 -0
- data/ext/nutcracker/m4/libtool.m4 +553 -492
- data/ext/nutcracker/m4/ltoptions.m4 +7 -6
- data/ext/nutcracker/m4/ltversion.m4 +5 -5
- data/ext/nutcracker/m4/lt~obsolete.m4 +9 -3
- data/ext/nutcracker/notes/c-styleguide.txt +0 -0
- data/ext/nutcracker/notes/debug.txt +0 -0
- data/ext/nutcracker/notes/memcache.txt +0 -0
- data/ext/nutcracker/notes/recommendation.md +21 -2
- data/ext/nutcracker/notes/redis.md +9 -9
- data/ext/nutcracker/notes/socket.txt +0 -0
- data/ext/nutcracker/scripts/nutcracker.init +0 -0
- data/ext/nutcracker/scripts/nutcracker.spec +0 -0
- data/ext/nutcracker/scripts/redis-check.py +0 -0
- data/ext/nutcracker/scripts/redis-check.sh +9 -0
- data/ext/nutcracker/src/Makefile +647 -0
- data/ext/nutcracker/src/Makefile.am +1 -1
- data/ext/nutcracker/src/Makefile.in +74 -153
- data/ext/nutcracker/src/hashkit/Makefile +476 -0
- data/ext/nutcracker/src/hashkit/Makefile.am +1 -0
- data/ext/nutcracker/src/hashkit/Makefile.in +39 -64
- data/ext/nutcracker/src/hashkit/libhashkit.a +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc16.c +66 -0
- data/ext/nutcracker/src/hashkit/nc_crc16.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc32.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_crc32.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_fnv.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_fnv.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_hashkit.h +2 -0
- data/ext/nutcracker/src/hashkit/nc_hsieh.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_hsieh.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_jenkins.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_jenkins.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_ketama.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_ketama.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_md5.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_md5.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_modula.c +18 -6
- data/ext/nutcracker/src/hashkit/nc_modula.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_murmur.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_murmur.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_one_at_a_time.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_one_at_a_time.o +0 -0
- data/ext/nutcracker/src/hashkit/nc_random.c +0 -0
- data/ext/nutcracker/src/hashkit/nc_random.o +0 -0
- data/ext/nutcracker/src/nc.c +0 -0
- data/ext/nutcracker/src/nc.o +0 -0
- data/ext/nutcracker/src/nc_array.c +0 -0
- data/ext/nutcracker/src/nc_array.h +0 -0
- data/ext/nutcracker/src/nc_array.o +0 -0
- data/ext/nutcracker/src/nc_client.c +0 -0
- data/ext/nutcracker/src/nc_client.h +0 -0
- data/ext/nutcracker/src/nc_client.o +0 -0
- data/ext/nutcracker/src/nc_conf.c +14 -35
- data/ext/nutcracker/src/nc_conf.h +1 -1
- data/ext/nutcracker/src/nc_conf.o +0 -0
- data/ext/nutcracker/src/nc_connection.c +0 -0
- data/ext/nutcracker/src/nc_connection.h +0 -0
- data/ext/nutcracker/src/nc_connection.o +0 -0
- data/ext/nutcracker/src/nc_core.c +29 -26
- data/ext/nutcracker/src/nc_core.h +13 -5
- data/ext/nutcracker/src/nc_core.o +0 -0
- data/ext/nutcracker/src/{nc_event.c → nc_epoll.c} +94 -30
- data/ext/nutcracker/src/nc_epoll.o +0 -0
- data/ext/nutcracker/src/nc_event.h +33 -13
- data/ext/nutcracker/src/nc_kqueue.c +296 -0
- data/ext/nutcracker/src/nc_kqueue.o +0 -0
- data/ext/nutcracker/src/nc_log.c +0 -0
- data/ext/nutcracker/src/nc_log.h +0 -0
- data/ext/nutcracker/src/nc_log.o +0 -0
- data/ext/nutcracker/src/nc_mbuf.c +0 -0
- data/ext/nutcracker/src/nc_mbuf.h +0 -0
- data/ext/nutcracker/src/nc_mbuf.o +0 -0
- data/ext/nutcracker/src/nc_message.c +0 -0
- data/ext/nutcracker/src/nc_message.h +2 -0
- data/ext/nutcracker/src/nc_message.o +0 -0
- data/ext/nutcracker/src/nc_proxy.c +8 -8
- data/ext/nutcracker/src/nc_proxy.h +0 -0
- data/ext/nutcracker/src/nc_proxy.o +0 -0
- data/ext/nutcracker/src/nc_queue.h +0 -0
- data/ext/nutcracker/src/nc_rbtree.c +0 -0
- data/ext/nutcracker/src/nc_rbtree.h +0 -0
- data/ext/nutcracker/src/nc_rbtree.o +0 -0
- data/ext/nutcracker/src/nc_request.c +3 -3
- data/ext/nutcracker/src/nc_request.o +0 -0
- data/ext/nutcracker/src/nc_response.c +4 -6
- data/ext/nutcracker/src/nc_response.o +0 -0
- data/ext/nutcracker/src/nc_server.c +14 -12
- data/ext/nutcracker/src/nc_server.h +0 -0
- data/ext/nutcracker/src/nc_server.o +0 -0
- data/ext/nutcracker/src/nc_signal.c +0 -0
- data/ext/nutcracker/src/nc_signal.h +0 -0
- data/ext/nutcracker/src/nc_signal.o +0 -0
- data/ext/nutcracker/src/nc_stats.c +16 -21
- data/ext/nutcracker/src/nc_stats.h +3 -4
- data/ext/nutcracker/src/nc_stats.o +0 -0
- data/ext/nutcracker/src/nc_string.c +0 -0
- data/ext/nutcracker/src/nc_string.h +0 -0
- data/ext/nutcracker/src/nc_string.o +0 -0
- data/ext/nutcracker/src/nc_util.c +16 -0
- data/ext/nutcracker/src/nc_util.h +1 -0
- data/ext/nutcracker/src/nc_util.o +0 -0
- data/ext/nutcracker/src/nutcracker +0 -0
- data/ext/nutcracker/src/proto/Makefile +454 -0
- data/ext/nutcracker/src/proto/Makefile.am +0 -0
- data/ext/nutcracker/src/proto/Makefile.in +32 -60
- data/ext/nutcracker/src/proto/libproto.a +0 -0
- data/ext/nutcracker/src/proto/nc_memcache.c +0 -0
- data/ext/nutcracker/src/proto/nc_memcache.o +0 -0
- data/ext/nutcracker/src/proto/nc_proto.h +0 -0
- data/ext/nutcracker/src/proto/nc_redis.c +17 -4
- data/ext/nutcracker/src/proto/nc_redis.o +0 -0
- data/ext/nutcracker/stamp-h1 +1 -0
- data/lib/nutcracker.rb +64 -2
- data/lib/nutcracker/version.rb +1 -1
- metadata +237 -9
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
data/ext/nutcracker/src/nc.c
CHANGED
File without changes
|
Binary file
|
File without changes
|
File without changes
|
Binary file
|
File without changes
|
File without changes
|
Binary file
|
@@ -1109,14 +1109,6 @@ conf_pre_validate(struct conf *cf)
|
|
1109
1109
|
return NC_OK;
|
1110
1110
|
}
|
1111
1111
|
|
1112
|
-
static int
|
1113
|
-
conf_server_pname_cmp(const void *t1, const void *t2)
|
1114
|
-
{
|
1115
|
-
const struct conf_server *s1 = t1, *s2 = t2;
|
1116
|
-
|
1117
|
-
return string_compare(&s1->pname, &s2->pname);
|
1118
|
-
}
|
1119
|
-
|
1120
1112
|
static int
|
1121
1113
|
conf_server_name_cmp(const void *t1, const void *t2)
|
1122
1114
|
{
|
@@ -1156,27 +1148,10 @@ conf_validate_server(struct conf *cf, struct conf_pool *cp)
|
|
1156
1148
|
|
1157
1149
|
/*
|
1158
1150
|
* Disallow duplicate servers - servers with identical "host:port:weight"
|
1159
|
-
* or "name" combination are considered as duplicates
|
1151
|
+
* or "name" combination are considered as duplicates. When server name
|
1152
|
+
* is configured, we only check for duplicate "name" and not for duplicate
|
1153
|
+
* "host:port:weight"
|
1160
1154
|
*/
|
1161
|
-
array_sort(&cp->server, conf_server_pname_cmp);
|
1162
|
-
for (valid = true, i = 0; i < nserver - 1; i++) {
|
1163
|
-
struct conf_server *cs1, *cs2;
|
1164
|
-
|
1165
|
-
cs1 = array_get(&cp->server, i);
|
1166
|
-
cs2 = array_get(&cp->server, i + 1);
|
1167
|
-
|
1168
|
-
if (string_compare(&cs1->pname, &cs2->pname) == 0) {
|
1169
|
-
log_error("conf: pool '%.*s' has servers with same name '%.*s'",
|
1170
|
-
cp->name.len, cp->name.data, cs1->pname.len,
|
1171
|
-
cs1->pname.data);
|
1172
|
-
valid = false;
|
1173
|
-
break;
|
1174
|
-
}
|
1175
|
-
}
|
1176
|
-
if (!valid) {
|
1177
|
-
return NC_ERROR;
|
1178
|
-
}
|
1179
|
-
|
1180
1155
|
array_sort(&cp->server, conf_server_name_cmp);
|
1181
1156
|
for (valid = true, i = 0; i < nserver - 1; i++) {
|
1182
1157
|
struct conf_server *cs1, *cs2;
|
@@ -1497,7 +1472,7 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
1497
1472
|
struct conf_server *field;
|
1498
1473
|
uint8_t *p, *q, *start;
|
1499
1474
|
uint8_t *pname, *addr, *port, *weight, *name;
|
1500
|
-
uint32_t k, pnamelen, addrlen, portlen, weightlen, namelen;
|
1475
|
+
uint32_t k, delimlen, pnamelen, addrlen, portlen, weightlen, namelen;
|
1501
1476
|
struct string address;
|
1502
1477
|
char delim[] = " ::";
|
1503
1478
|
|
@@ -1514,7 +1489,7 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
1514
1489
|
|
1515
1490
|
value = array_top(&cf->arg);
|
1516
1491
|
|
1517
|
-
/* parse "hostname:port:weight [name]" from the end */
|
1492
|
+
/* parse "hostname:port:weight [name]" or "/path/unix_socket:weight [name]" from the end */
|
1518
1493
|
p = value->data + value->len - 1;
|
1519
1494
|
start = value->data;
|
1520
1495
|
addr = NULL;
|
@@ -1526,6 +1501,8 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
1526
1501
|
name = NULL;
|
1527
1502
|
namelen = 0;
|
1528
1503
|
|
1504
|
+
delimlen = value->data[0] == '/' ? 2 : 3;
|
1505
|
+
|
1529
1506
|
for (k = 0; k < sizeof(delim); k++) {
|
1530
1507
|
q = nc_strrchr(p, start, delim[k]);
|
1531
1508
|
if (q == NULL) {
|
@@ -1562,8 +1539,8 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
1562
1539
|
p = q - 1;
|
1563
1540
|
}
|
1564
1541
|
|
1565
|
-
if (k !=
|
1566
|
-
return "has an invalid \"hostname:port:weight [name]\" format string";
|
1542
|
+
if (k != delimlen) {
|
1543
|
+
return "has an invalid \"hostname:port:weight [name]\"or \"/path/unix_socket:weight [name]\" format string";
|
1567
1544
|
}
|
1568
1545
|
|
1569
1546
|
pname = value->data;
|
@@ -1582,9 +1559,11 @@ conf_add_server(struct conf *cf, struct command *cmd, void *conf)
|
|
1582
1559
|
return "has an invalid weight in \"hostname:port:weight [name]\" format string";
|
1583
1560
|
}
|
1584
1561
|
|
1585
|
-
|
1586
|
-
|
1587
|
-
|
1562
|
+
if (value->data[0] != '/') {
|
1563
|
+
field->port = nc_atoi(port, portlen);
|
1564
|
+
if (field->port < 0 || !nc_valid_port(field->port)) {
|
1565
|
+
return "has an invalid port in \"hostname:port:weight [name]\" format string";
|
1566
|
+
}
|
1588
1567
|
}
|
1589
1568
|
|
1590
1569
|
if (name == NULL) {
|
@@ -120,7 +120,7 @@ char *conf_set_string(struct conf *cf, struct command *cmd, void *conf);
|
|
120
120
|
char *conf_set_listen(struct conf *cf, struct command *cmd, void *conf);
|
121
121
|
char *conf_add_server(struct conf *cf, struct command *cmd, void *conf);
|
122
122
|
char *conf_set_num(struct conf *cf, struct command *cmd, void *conf);
|
123
|
-
char *
|
123
|
+
char *conf_set_bool(struct conf *cf, struct command *cmd, void *conf);
|
124
124
|
char *conf_set_hash(struct conf *cf, struct command *cmd, void *conf);
|
125
125
|
char *conf_set_distribution(struct conf *cf, struct command *cmd, void *conf);
|
126
126
|
char *conf_set_hashtag(struct conf *cf, struct command *cmd, void *conf);
|
Binary file
|
File without changes
|
File without changes
|
Binary file
|
@@ -17,9 +17,6 @@
|
|
17
17
|
|
18
18
|
#include <stdlib.h>
|
19
19
|
#include <unistd.h>
|
20
|
-
|
21
|
-
#include <sys/epoll.h>
|
22
|
-
|
23
20
|
#include <nc_core.h>
|
24
21
|
#include <nc_event.h>
|
25
22
|
#include <nc_conf.h>
|
@@ -28,6 +25,10 @@
|
|
28
25
|
|
29
26
|
static uint32_t ctx_id; /* context generation */
|
30
27
|
|
28
|
+
/* function prototype for use in core_ctx_create() */
|
29
|
+
static void
|
30
|
+
core_core(void *arg, uint32_t evflags);
|
31
|
+
|
31
32
|
static struct context *
|
32
33
|
core_ctx_create(struct instance *nci)
|
33
34
|
{
|
@@ -41,12 +42,10 @@ core_ctx_create(struct instance *nci)
|
|
41
42
|
ctx->id = ++ctx_id;
|
42
43
|
ctx->cf = NULL;
|
43
44
|
ctx->stats = NULL;
|
45
|
+
ctx->evb = NULL;
|
44
46
|
array_null(&ctx->pool);
|
45
|
-
ctx->ep = -1;
|
46
|
-
ctx->nevent = EVENT_SIZE_HINT;
|
47
47
|
ctx->max_timeout = nci->stats_interval;
|
48
48
|
ctx->timeout = ctx->max_timeout;
|
49
|
-
ctx->event = NULL;
|
50
49
|
|
51
50
|
/* parse and create configuration */
|
52
51
|
ctx->cf = conf_create(nci->conf_filename);
|
@@ -74,8 +73,8 @@ core_ctx_create(struct instance *nci)
|
|
74
73
|
}
|
75
74
|
|
76
75
|
/* initialize event handling for client, proxy and server */
|
77
|
-
|
78
|
-
if (
|
76
|
+
ctx->evb = evbase_create(NC_EVENT_SIZE, &core_core);
|
77
|
+
if (ctx->evb == NULL) {
|
79
78
|
stats_destroy(ctx->stats);
|
80
79
|
server_pool_deinit(&ctx->pool);
|
81
80
|
conf_destroy(ctx->cf);
|
@@ -87,7 +86,7 @@ core_ctx_create(struct instance *nci)
|
|
87
86
|
status = server_pool_preconnect(ctx);
|
88
87
|
if (status != NC_OK) {
|
89
88
|
server_pool_disconnect(ctx);
|
90
|
-
|
89
|
+
evbase_destroy(ctx->evb);
|
91
90
|
stats_destroy(ctx->stats);
|
92
91
|
server_pool_deinit(&ctx->pool);
|
93
92
|
conf_destroy(ctx->cf);
|
@@ -99,7 +98,7 @@ core_ctx_create(struct instance *nci)
|
|
99
98
|
status = proxy_init(ctx);
|
100
99
|
if (status != NC_OK) {
|
101
100
|
server_pool_disconnect(ctx);
|
102
|
-
|
101
|
+
evbase_destroy(ctx->evb);
|
103
102
|
stats_destroy(ctx->stats);
|
104
103
|
server_pool_deinit(&ctx->pool);
|
105
104
|
conf_destroy(ctx->cf);
|
@@ -118,7 +117,7 @@ core_ctx_destroy(struct context *ctx)
|
|
118
117
|
log_debug(LOG_VVERB, "destroy ctx %p id %"PRIu32"", ctx, ctx->id);
|
119
118
|
proxy_deinit(ctx);
|
120
119
|
server_pool_disconnect(ctx);
|
121
|
-
|
120
|
+
evbase_destroy(ctx->evb);
|
122
121
|
stats_destroy(ctx->stats);
|
123
122
|
server_pool_deinit(&ctx->pool);
|
124
123
|
conf_destroy(ctx->cf);
|
@@ -206,9 +205,9 @@ core_close(struct context *ctx, struct conn *conn)
|
|
206
205
|
conn->eof, conn->done, conn->recv_bytes, conn->send_bytes,
|
207
206
|
conn->err ? ':' : ' ', conn->err ? strerror(conn->err) : "");
|
208
207
|
|
209
|
-
status = event_del_conn(ctx->
|
208
|
+
status = event_del_conn(ctx->evb, conn);
|
210
209
|
if (status < 0) {
|
211
|
-
log_warn("event del conn
|
210
|
+
log_warn("event del conn %c %d failed, ignored: %s",
|
212
211
|
type, conn->sd, strerror(errno));
|
213
212
|
}
|
214
213
|
|
@@ -277,23 +276,33 @@ core_timeout(struct context *ctx)
|
|
277
276
|
}
|
278
277
|
|
279
278
|
static void
|
280
|
-
core_core(
|
279
|
+
core_core(void *arg, uint32_t evflags)
|
281
280
|
{
|
282
281
|
rstatus_t status;
|
282
|
+
struct conn *conn = (struct conn *) arg;
|
283
|
+
struct context *ctx;
|
283
284
|
|
284
|
-
|
285
|
+
|
286
|
+
|
287
|
+
if ((conn->proxy) || (conn->client)) {
|
288
|
+
ctx = ((struct server_pool *) (conn -> owner)) -> ctx;
|
289
|
+
} else {
|
290
|
+
ctx = ((struct server_pool *) (((struct server *) (conn -> owner)) -> owner )) -> ctx;
|
291
|
+
}
|
292
|
+
|
293
|
+
log_debug(LOG_VVERB, "event %04"PRIX32" on %c %d", evflags,
|
285
294
|
conn->client ? 'c' : (conn->proxy ? 'p' : 's'), conn->sd);
|
286
295
|
|
287
|
-
conn->events =
|
296
|
+
conn->events = evflags;
|
288
297
|
|
289
298
|
/* error takes precedence over read | write */
|
290
|
-
if (
|
299
|
+
if (evflags & EV_ERR) {
|
291
300
|
core_error(ctx, conn);
|
292
301
|
return;
|
293
302
|
}
|
294
303
|
|
295
304
|
/* read takes precedence over write */
|
296
|
-
if (
|
305
|
+
if (evflags & EV_READ) {
|
297
306
|
status = core_recv(ctx, conn);
|
298
307
|
if (status != NC_OK || conn->done || conn->err) {
|
299
308
|
core_close(ctx, conn);
|
@@ -301,7 +310,7 @@ core_core(struct context *ctx, struct conn *conn, uint32_t events)
|
|
301
310
|
}
|
302
311
|
}
|
303
312
|
|
304
|
-
if (
|
313
|
+
if (evflags & EV_WRITE) {
|
305
314
|
status = core_send(ctx, conn);
|
306
315
|
if (status != NC_OK || conn->done || conn->err) {
|
307
316
|
core_close(ctx, conn);
|
@@ -315,17 +324,11 @@ core_loop(struct context *ctx)
|
|
315
324
|
{
|
316
325
|
int i, nsd;
|
317
326
|
|
318
|
-
nsd = event_wait(ctx->
|
327
|
+
nsd = event_wait(ctx->evb, ctx->timeout);
|
319
328
|
if (nsd < 0) {
|
320
329
|
return nsd;
|
321
330
|
}
|
322
331
|
|
323
|
-
for (i = 0; i < nsd; i++) {
|
324
|
-
struct epoll_event *ev = &ctx->event[i];
|
325
|
-
|
326
|
-
core_core(ctx, ev->data.ptr, ev->events);
|
327
|
-
}
|
328
|
-
|
329
332
|
core_timeout(ctx);
|
330
333
|
|
331
334
|
stats_swap(ctx->stats);
|
@@ -40,10 +40,20 @@
|
|
40
40
|
# define NC_STATS 0
|
41
41
|
#endif
|
42
42
|
|
43
|
+
#ifdef HAVE_EPOLL
|
44
|
+
#define NC_HAVE_EPOLL 1
|
45
|
+
#elif HAVE_KQUEUE
|
46
|
+
#define NC_HAVE_KQUEUE 1
|
47
|
+
#endif
|
48
|
+
|
43
49
|
#ifdef HAVE_LITTLE_ENDIAN
|
44
50
|
# define NC_LITTLE_ENDIAN 1
|
45
51
|
#endif
|
46
52
|
|
53
|
+
#ifdef HAVE_BACKTRACE
|
54
|
+
#define NC_HAVE_BACKTRACE 1
|
55
|
+
#endif
|
56
|
+
|
47
57
|
#define NC_OK 0
|
48
58
|
#define NC_ERROR -1
|
49
59
|
#define NC_EAGAIN -2
|
@@ -101,14 +111,12 @@ struct context {
|
|
101
111
|
struct stats *stats; /* stats */
|
102
112
|
|
103
113
|
struct array pool; /* server_pool[] */
|
104
|
-
|
105
|
-
int ep; /* epoll device */
|
106
|
-
int nevent; /* # epoll event */
|
114
|
+
struct evbase *evb;
|
107
115
|
int max_timeout; /* epoll wait max timeout in msec */
|
108
|
-
int timeout;
|
109
|
-
struct epoll_event *event; /* epoll event */
|
116
|
+
int timeout;
|
110
117
|
};
|
111
118
|
|
119
|
+
|
112
120
|
struct instance {
|
113
121
|
struct context *ctx; /* active context */
|
114
122
|
int log_level; /* log level */
|
Binary file
|
@@ -16,66 +16,86 @@
|
|
16
16
|
*/
|
17
17
|
|
18
18
|
#include <unistd.h>
|
19
|
-
#include <sys/epoll.h>
|
20
|
-
|
21
19
|
#include <nc_core.h>
|
22
20
|
#include <nc_event.h>
|
23
21
|
|
24
|
-
|
25
|
-
|
22
|
+
#ifdef NC_HAVE_EPOLL
|
23
|
+
#include <sys/epoll.h>
|
24
|
+
|
25
|
+
struct evbase *
|
26
|
+
evbase_create(int nevent, void (*callback_fp)(void *, uint32_t))
|
26
27
|
{
|
28
|
+
|
29
|
+
struct evbase *evb;
|
27
30
|
int status, ep;
|
28
31
|
struct epoll_event *event;
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
if (nevent <= 0) {
|
34
|
+
log_error("nevent has to be positive %d", nevent);
|
35
|
+
return NULL;
|
36
|
+
}
|
33
37
|
|
34
|
-
ep = epoll_create(
|
38
|
+
ep = epoll_create(nevent);
|
35
39
|
if (ep < 0) {
|
36
|
-
log_error("epoll create of size %d failed: %s",
|
37
|
-
return
|
40
|
+
log_error("epoll create of size %d failed: %s", nevent, strerror(errno));
|
41
|
+
return NULL;
|
38
42
|
}
|
39
43
|
|
40
|
-
event = nc_calloc(
|
44
|
+
event = nc_calloc(nevent, sizeof(*event));
|
41
45
|
if (event == NULL) {
|
42
46
|
status = close(ep);
|
43
47
|
if (status < 0) {
|
44
48
|
log_error("close e %d failed, ignored: %s", ep, strerror(errno));
|
45
49
|
}
|
46
|
-
return
|
50
|
+
return NULL;
|
47
51
|
}
|
48
52
|
|
49
|
-
|
50
|
-
|
53
|
+
evb = nc_alloc(sizeof(*evb));
|
54
|
+
if (evb == NULL) {
|
55
|
+
nc_free(event);
|
56
|
+
status = close(ep);
|
57
|
+
if (status < 0) {
|
58
|
+
log_error("close e %d failed, ignored: %s", ep, strerror(errno));
|
59
|
+
}
|
60
|
+
return NULL;
|
51
61
|
|
52
|
-
|
53
|
-
ctx->nevent, ctx->timeout);
|
62
|
+
}
|
54
63
|
|
55
|
-
|
64
|
+
evb->nevent = nevent;
|
65
|
+
evb->ep = ep;
|
66
|
+
evb->event = event;
|
67
|
+
evb->callback_fp = callback_fp;
|
68
|
+
|
69
|
+
log_debug(LOG_INFO, "e %d with nevent %d", evb->ep,
|
70
|
+
evb->nevent);
|
71
|
+
|
72
|
+
return evb;
|
56
73
|
}
|
57
74
|
|
58
75
|
void
|
59
|
-
|
76
|
+
evbase_destroy(struct evbase *evb)
|
60
77
|
{
|
61
78
|
int status;
|
62
79
|
|
63
|
-
|
80
|
+
if (evb == NULL) return;
|
64
81
|
|
65
|
-
|
82
|
+
ASSERT(evb->ep >= 0);
|
66
83
|
|
67
|
-
|
84
|
+
nc_free(evb->event);
|
85
|
+
|
86
|
+
status = close(evb->ep);
|
68
87
|
if (status < 0) {
|
69
|
-
log_error("close e %d failed, ignored: %s",
|
88
|
+
log_error("close e %d failed, ignored: %s", evb->ep, strerror(errno));
|
70
89
|
}
|
71
|
-
|
90
|
+
nc_free(evb);
|
72
91
|
}
|
73
92
|
|
74
93
|
int
|
75
|
-
event_add_out(
|
94
|
+
event_add_out(struct evbase *evb, struct conn *c)
|
76
95
|
{
|
77
96
|
int status;
|
78
97
|
struct epoll_event event;
|
98
|
+
int ep = evb->ep;
|
79
99
|
|
80
100
|
ASSERT(ep > 0);
|
81
101
|
ASSERT(c != NULL);
|
@@ -101,10 +121,11 @@ event_add_out(int ep, struct conn *c)
|
|
101
121
|
}
|
102
122
|
|
103
123
|
int
|
104
|
-
event_del_out(
|
124
|
+
event_del_out(struct evbase *evb, struct conn *c)
|
105
125
|
{
|
106
126
|
int status;
|
107
127
|
struct epoll_event event;
|
128
|
+
int ep = evb->ep;
|
108
129
|
|
109
130
|
ASSERT(ep > 0);
|
110
131
|
ASSERT(c != NULL);
|
@@ -130,10 +151,11 @@ event_del_out(int ep, struct conn *c)
|
|
130
151
|
}
|
131
152
|
|
132
153
|
int
|
133
|
-
event_add_conn(
|
154
|
+
event_add_conn(struct evbase *evb, struct conn *c)
|
134
155
|
{
|
135
156
|
int status;
|
136
157
|
struct epoll_event event;
|
158
|
+
int ep = evb->ep;
|
137
159
|
|
138
160
|
ASSERT(ep > 0);
|
139
161
|
ASSERT(c != NULL);
|
@@ -155,9 +177,10 @@ event_add_conn(int ep, struct conn *c)
|
|
155
177
|
}
|
156
178
|
|
157
179
|
int
|
158
|
-
event_del_conn(
|
180
|
+
event_del_conn(struct evbase *evb, struct conn *c)
|
159
181
|
{
|
160
182
|
int status;
|
183
|
+
int ep = evb->ep;
|
161
184
|
|
162
185
|
ASSERT(ep > 0);
|
163
186
|
ASSERT(c != NULL);
|
@@ -176,9 +199,14 @@ event_del_conn(int ep, struct conn *c)
|
|
176
199
|
}
|
177
200
|
|
178
201
|
int
|
179
|
-
event_wait(
|
202
|
+
event_wait(struct evbase *evb, int timeout)
|
180
203
|
{
|
181
|
-
int nsd;
|
204
|
+
int nsd, i;
|
205
|
+
uint32_t evflags = 0;
|
206
|
+
int ep = evb->ep;
|
207
|
+
struct epoll_event *event = evb->event;
|
208
|
+
int nevent = evb->nevent;
|
209
|
+
void (*callback_fp)(void *, uint32_t) = evb->callback_fp;
|
182
210
|
|
183
211
|
ASSERT(ep > 0);
|
184
212
|
ASSERT(event != NULL);
|
@@ -187,6 +215,22 @@ event_wait(int ep, struct epoll_event *event, int nevent, int timeout)
|
|
187
215
|
for (;;) {
|
188
216
|
nsd = epoll_wait(ep, event, nevent, timeout);
|
189
217
|
if (nsd > 0) {
|
218
|
+
for (i = 0; i < nsd; i++) {
|
219
|
+
struct epoll_event *ev = &evb->event[i];
|
220
|
+
|
221
|
+
evflags = 0;
|
222
|
+
if (ev->events & EPOLLERR)
|
223
|
+
evflags |= EV_ERR;
|
224
|
+
|
225
|
+
if (ev->events & EPOLLIN)
|
226
|
+
evflags |= EV_READ;
|
227
|
+
|
228
|
+
if (ev->events & EPOLLOUT)
|
229
|
+
evflags |= EV_WRITE;
|
230
|
+
|
231
|
+
if (callback_fp != NULL)
|
232
|
+
(*callback_fp)((void *) ev->data.ptr, evflags);
|
233
|
+
}
|
190
234
|
return nsd;
|
191
235
|
}
|
192
236
|
|
@@ -209,6 +253,26 @@ event_wait(int ep, struct epoll_event *event, int nevent, int timeout)
|
|
209
253
|
|
210
254
|
return -1;
|
211
255
|
}
|
212
|
-
|
213
256
|
NOT_REACHED();
|
214
257
|
}
|
258
|
+
|
259
|
+
int
|
260
|
+
event_add_st(struct evbase *evb, int fd)
|
261
|
+
{
|
262
|
+
int status;
|
263
|
+
struct epoll_event ev;
|
264
|
+
|
265
|
+
ev.data.fd = fd;
|
266
|
+
ev.events = EPOLLIN;
|
267
|
+
|
268
|
+
status = epoll_ctl(evb->ep, EPOLL_CTL_ADD, fd, &ev);
|
269
|
+
if (status < 0) {
|
270
|
+
log_error("epoll ctl on e %d sd %d failed: %s", evb->ep, fd,
|
271
|
+
strerror(errno));
|
272
|
+
return status;
|
273
|
+
}
|
274
|
+
|
275
|
+
return status;
|
276
|
+
}
|
277
|
+
|
278
|
+
#endif /* NC_HAVE_EPOLL */
|