示例#1
0
void* socktype_from_m(const mxArray* param) {
    int* output = NULL;
    char* name = NULL;
    const zmq_socket_type_t* sockType = NULL;

    output = (int*) mxCalloc(1, sizeof(int));

    if (output == NULL) {
        mexErrMsgIdAndTxt("util:calloc", "Error: Unsuccessful memory allocation.");
    }

    name = (char*) str_from_m(param);
    if (name == NULL) return NULL;

    sockType = find_socket_type_by_name(name);
    if (sockType != NULL) *output = sockType->id;

    mxFree(name);

    return (void*) output;
}
示例#2
0
文件: sockopt.c 项目: fagg/matlab-zmq
void* mechanism_from_m(const mxArray* param) {
    int* output = NULL;
    char* name = NULL;
    const zmq_sockopt_mechanism_t* mechanism = NULL;

    output = (int*) mxCalloc(1, sizeof(int));

    if (output == NULL) {
        mexErrMsgIdAndTxt("util:calloc", "Error: Unsuccessful memory allocation.");
    }

    name = (char*) str_from_m(param);
    if (name == NULL) return NULL;

    mechanism = find_sockopt_mechanism_by_name(name);
    if (mechanism != NULL) *output = mechanism->id;

    mxFree(name);

    return (void*) output;
}
示例#3
0
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    void* socket = NULL;
    char* option = NULL;
    void* optValue = NULL;
    size_t optLen;
    const zmq_sockopt_desc_t* optDesc = NULL;
    const zmq_sockopt_type_t* typeDesc = NULL;
    int rc;

    if (nrhs != 3) {
        mexErrMsgIdAndTxt("zmq:sockopts:invalidArgs",
                "Error: Tree arguments are required: socket, option, value");
        return;
    }
    if (mxIsChar(prhs[1]) != 1) {
        mexErrMsgIdAndTxt("zmq:sockopts:invalidOptionName",
                "Error: option_name is not a string.");
        return;
    }
    if (mxGetM(prhs[1]) != 1) {
        mexErrMsgIdAndTxt("zmq:sockopts:optionNameNotRowVec",
                "Error: option_name is not a row vector.");
        return;
    }

    /* Discover which option should be used */
    option = (char*) str_from_m(prhs[1]);
    if (option == NULL) return;

    optDesc = find_sockopt_by_name(option);
    if (optDesc == NULL) return;

    typeDesc = find_sockopt_type_by_id(optDesc->typeId);
    if (typeDesc == NULL) return;

    mxFree(option);

    socket = pointer_from_m(prhs[0]);
    if (socket == NULL) return;

    optValue = typeDesc->from_m(prhs[2]);
    if (optValue == NULL) return;

    optLen = typeDesc->maxLen;
    /* Correct len for compound types */
    if (typeDesc->id == SOPT_STRING || typeDesc->id == SOPT_KEY) {
        optLen = strlen((char*) optValue)*sizeof(char);
    }

    rc = zmq_setsockopt(socket, optDesc->id, optValue, optLen);

    if (rc < 0) {
        handle_error();
        mxFree(optValue);
        return;
    }

    plhs[0] = int_to_m((void*) &rc);
    mxFree(optValue);
}