Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用mysql udf通过套接字向服务器发送字符串_Mysql_Sockets_Unix - Fatal编程技术网

无法使用mysql udf通过套接字向服务器发送字符串

无法使用mysql udf通过套接字向服务器发送字符串,mysql,sockets,unix,Mysql,Sockets,Unix,在mysql shell上,我正在运行“selectsocketcall();”,它返回5 我正在尝试从mysql中的UDF函数连接到unix套接字服务器(在本地运行)。UDF函数中使用的connect()函数以某种方式失败,并立即从那里返回 请帮助我找出我在代码中的错误。我正在做覆盆子皮 自定义项功能代码如下所示: #define SOCK_PATH "/root/mysock" longlong socketCall(UDF_INIT *initid, UDF_ARGS *args, ch

在mysql shell上,我正在运行“selectsocketcall();”,它返回5

我正在尝试从mysql中的UDF函数连接到unix套接字服务器(在本地运行)。UDF函数中使用的connect()函数以某种方式失败,并立即从那里返回

请帮助我找出我在代码中的错误。我正在做覆盆子皮

自定义项功能代码如下所示:

#define SOCK_PATH "/root/mysock"

longlong socketCall(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error)
{
    int s,len,n;
    struct sockaddr_un remote;
    char str[100] = "Hello Saggu calling from MySql";

    if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
        return 2;  
    }
    bzero((char *) &remote, sizeof(remote));
    remote.sun_family = AF_UNIX;
    strcpy(remote.sun_path, SOCK_PATH);
    len = strlen(remote.sun_path) + sizeof(remote.sun_family);
    if (connect(s, (struct sockaddr *)&remote, len) == -1) {
        return 5;
    }

    n = send(s, str, strlen(str), 0);
    close(s);
    return n;    
}    
服务器代码如下所示:

#define SOCK_PATH "/root/mysock"
int main(void)
{
    int s, s2, t, len;
    struct sockaddr_un local, remote;
    char str[100];
    if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
        perror("socket");
        exit(1);
    }
    local.sun_family = AF_UNIX;
    strcpy(local.sun_path, SOCK_PATH);
    unlink(local.sun_path);
    len = strlen(local.sun_path) + sizeof(local.sun_family);
    if (bind(s, (struct sockaddr *)&local, len) == -1) {
       perror("bind");
       exit(1);
    }
    if (listen(s, 5) == -1) {
       perror("listen");
       exit(1);
    }
    for(;;) {
        int done, n;
        printf("Waiting for a connection...\n");
        t = sizeof(remote);
        if ((s2 = accept(s, (struct sockaddr *)&remote, &t)) == -1) {
            perror("accept");
            exit(1);
        }
        printf("Connected.\n");
        n = recv(s2, str, 100, 0);
        printf("\n  %s\n",str);      
        close(s2);
    }    
    return 0;    
}

有人能帮我吗???我完全被卡住了,在任何地方都找不到任何解决方案。我最终不得不使用tcp/ip套接字而不是unix套接字,现在它工作得很好。我不确定,但通过使用mysql udf,您似乎需要为unix套接字文件提供某种特殊的权限,而我现在还不知道这一点。