developer's diary

最近はc#のエントリが多いです

C初心者がmemcached-1.4.5を追いかける。(27)

C初心者がmemcached-1.4.5を追いかける。(26)の続き
ソースはコチラにてDLしました。

getoptで受け取ったパラメータによって処理を行っている部分を追いかける。

memcached.c(4422行目あたり)

        case 'B':
            protocol_specified = true;
            if (strcmp(optarg, "auto") == 0) {
                settings.binding_protocol = negotiating_prot;
            } else if (strcmp(optarg, "binary") == 0) {
                settings.binding_protocol = binary_prot;
            } else if (strcmp(optarg, "ascii") == 0) {
                settings.binding_protocol = ascii_prot;
            } else {
                fprintf(stderr, "Invalid value for binding protocol: %s\n"
                        " -- should be one of auto, binary, or ascii\n", optarg);
                exit(EX_USAGE);
            }
            break;
          "B:"  /* Binding protocol */

protocol_specifiedをtrueに設定。

  • B に続く引数が

autoの場合、settings.binding_protocol に negotiating_protを設定
binaryの場合、settings.binding_protocol に binary_protを設定
asciiの場合、settings.binding_protocol に ascii_protを設定
それ以外はエラー exitの引数のEX_USAGEは『誤った個数の引数が渡されたときなど、コマンドが間違って使われたことを表す 終了コード』のよう。14.1.5 プロセス管理に書いてました。

デフォルトはnegotiating_prot? memcached.c(196行目あたり)

    settings.binding_protocol = negotiating_prot;


protocol_specifiedはmemcached.c(4479行目あたり)で利用されてます。

    if (settings.sasl) {
        if (!protocol_specified) {
            settings.binding_protocol = binary_prot;
        } else {
            if (settings.binding_protocol != binary_prot) {
                fprintf(stderr, "ERROR: You cannot allow the ASCII protocol while using SASL.\n");
                exit(EX_USAGE);
            }
        }
    }

ここはsettings.saslを利用する場合は、binary_protしか利用できないようにしてるみたいですね。