【问题标题】:Enet.c library not working correctly on mips systemEnet.c 库在 mips 系统上无法正常工作
【发布时间】:2022-01-03 05:19:08
【问题描述】:

我正在尝试创建一个使用 enet 发送一些数据的函数,但首先我想确保 here 中的示例在 mips 系统上正常工作。

我在 Ubuntu 和 Mac 上测试了该示例,它工作得非常好,但是当我在 mips 系统上测试它时,它总是无法创建主机,而在我测试的其他系统上创建主机时总是没有任何问题。这里有人知道会发生什么吗?有人告诉我这可能是 libenet.so 文件的问题,但由于它与 enet_initialize 函数一起使用,我认为它可能是其他问题。

如果有人想查看,这是我的代码:

#define ENET_IMPLEMENTATION
#include <enet.h>
#include <stdio.h>

int main() {
    if (enet_initialize () != 0) {
        printf("An error occurred while initializing ENet.\n");
        return 1;
    } 
    else {
        printf("Welcome to enet! :D\n");
    }

    //Client side
    ENetHost* client = { 0 };
    client = enet_host_create(NULL /* create a client host */,
                              1 /* only allow 1 outgoing connection */,
                              2 /* allow up 2 channels to be used, 0 and 1 */,
                              0 /* assume any amount of incoming bandwidth */,
                              0 /* assume any amount of outgoing bandwidth */);
    if (client == NULL) {
        fprintf(stderr,
                "An error occurred while trying to create an ENet client host.\n");
        exit(EXIT_FAILURE);
    } 
    else {
        printf("Client created successfully! :D\n");
    }

    enet_host_destroy(server);
    enet_deinitialize();
    return 0; 
}

我的输出是消息: 欢迎来到伊内! :D 尝试创建 ENet 客户端主机时出错。

【问题讨论】:

    标签: c mips enet


    【解决方案1】:

    尝试调试它并进入enet_host_create 函数,看看它在哪里失败。看起来该函数的源代码在header file 中。

    如果您无法调试和单步调试,您可以临时修改头文件以添加额外的日志记录。

    它失败的一些潜在原因:

    • peerCount &gt; ENET_PROTOCOL_MAXIMUM_PEER_ID
    • enet_malloc malloc 分配内存失败
    • net_socket_create(ENET_SOCKET_TYPE_DATAGRAM) == ENET_SOCKET_NULL

    我认为peerCount 可能不是问题,因为默认的ENET_PROTOCOL_MAXIMUM_PEER_ID0xFFF,而您正在传递1

    这可能是enet_mallocnet_socket_create 的问题。默认情况下,enet_malloc 只是标准库中的常规malloc,我猜这就是您正在使用的,因为您没有使用enet_initialize_with_callbacks 进行初始化。而enet_socket_create 只是调用socket 系统调用:

    ENetSocket enet_socket_create(ENetSocketType type) {
        return socket(PF_INET6, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
    }
    

    我会确保您平台的 mallocsocket 实现按预期工作。

    【讨论】:

      猜你喜欢
      • 2015-08-24
      • 2017-10-27
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多