我正在尝试创建一个使用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;
}我的输出是这样的消息:欢迎使用enet!:D尝试创建ENet客户端主机时出现错误。
发布于 2021-11-24 20:54:56
尝试对其进行调试,并单步执行enet_host_create函数,查看它的故障所在。看起来该函数的源代码在header file中。
如果您无法调试和逐步执行它,可以临时修改头文件以添加额外的日志记录。
它失败的一些潜在原因:
peerCount > ENET_PROTOCOL_MAXIMUM_PEER_IDenet_malloc malloc无法分配memorynet_socket_create(ENET_SOCKET_TYPE_DATAGRAM) == ENET_SOCKET_NULL我认为这可能不是peerCount的问题,因为默认的ENET_PROTOCOL_MAXIMUM_PEER_ID是0xFFF,而您传递的是1。
这可能是enet_malloc或net_socket_create的问题。默认情况下,enet_malloc只是来自stdlib的常规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);
}我会确保您的平台的malloc和socket实现按预期工作。
https://stackoverflow.com/questions/70102498
复制相似问题