Mex-файл на основе Matlab C с не работающими сокетами

Я хотел бы узнать немного больше о сетевых инструментах в C/C++, и я решил скопировать некоторый эхо-сервер C, закодированный в mex-файл, чтобы играть с ним через Matlab. Проблема в том, что когда я собираю mex-файл и выполняю его, он, кажется, работает вечно, не слушая сокет или что-то еще. Я включил в код некоторые операторы print, чтобы проверить, вводим ли мы вообще mex-файл, но в настоящее время ни один из них не печатается вообще. Вот код:

#define char16_t UINT16_T //shenanigans with the compiler

#include "mex.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>

void echo(){

    char str[100];
    int listen_fd, comm_fd;
    struct sockaddr_in servaddr;

    listen_fd = socket(AF_INET, SOCK_STREAM,0);
    bzero(&servaddr, sizeof(servaddr));

    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htons(INADDR_ANY);
    servaddr.sin_port = htons(22000);

    bind(listen_fd, (struct sockaddr *) &servaddr, sizeof(servaddr));

    mexPrintf("Listening");

    listen(listen_fd, 10);

    comm_fd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
    mexPrintf("Connected");

    while(1)
    {
        bzero(str, 100);
        read(comm_fd, str, 100);
        mexPrintf("Echoing back - %s", str);
        write(comm_fd, str, strlen(str)+1);
    }

}

void mexFunction(int nlhs, mxArray *plhs[],
                 int nrhs, const mxArray *prhs[])
{
    mexPrintf("Starting");

    echo();

    mexPrintf("Finishing");
}

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Таким образом, после тестирования эхо-сервера, он действительно работает, он просто не печатает, пока открыт сокет. Довольно странно!

Другие вопросы по тегам