首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Enet.c库在mips系统上无法正常工作

Enet.c库在mips系统上无法正常工作
EN

Stack Overflow用户
提问于 2021-11-24 20:26:02
回答 1查看 34关注 0票数 0

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

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

这是我的代码,如果有人想要检查它:

代码语言:javascript
复制
#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; 
}

我的输出是这样的消息:欢迎使用enet!:D尝试创建ENet客户端主机时出现错误。

EN

回答 1

Stack Overflow用户

发布于 2021-11-24 20:54:56

尝试对其进行调试,并单步执行enet_host_create函数,查看它的故障所在。看起来该函数的源代码在header file中。

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

它失败的一些潜在原因:

  • peerCount > ENET_PROTOCOL_MAXIMUM_PEER_ID
  • enet_malloc malloc无法分配memory
  • net_socket_create(ENET_SOCKET_TYPE_DATAGRAM) == ENET_SOCKET_NULL

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

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

代码语言:javascript
复制
ENetSocket enet_socket_create(ENetSocketType type) {
    return socket(PF_INET6, type == ENET_SOCKET_TYPE_DATAGRAM ? SOCK_DGRAM : SOCK_STREAM, 0);
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70102498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档