libuv错误创建基于回显服务器udp

问题描述

当我开始收听传入消息时遇到问题, 服务器卡在uv_run上,我已经在服务器上工作了,但是删除了 编译时文件错误,现在卡住了= / 我正在使用libuv库并尝试使回显服务器基于udp

#define UDP_SERVER_PORT 8888

static void on_send(uv_udp_send_t* req,int status){
    free(req);
    if (status) {
        fprintf(stderr,"uv_udp_send_cb error: %s\n",uv_strerror(status));
    }
}
static void on_read(uv_udp_t *req,ssize_t nread,const uv_buf_t *buf,const struct sockaddr *addr,unsigned flags){
    puts(":::::ON READ::::::");
    (void)flags;
    if (nread < 0) {
        fprintf(stderr,"Read error %s\n",uv_err_name(nread));
        uv_close((uv_handle_t*) req,NULL);
        free(buf->base);
        return;
    }
    if (nread > 0) {
        char sender[17] = { 0 };
        uv_ip4_name((const struct sockaddr_in*) addr,sender,16);
        fprintf(stderr,"Recv from %s\n",sender);

        uv_udp_send_t* res = malloc(sizeof(uv_udp_send_t));
        uv_buf_t buff = uv_buf_init(buf->base,nread);
        printf("-> Message Received:\n- %s\n",buf->base);
        uv_udp_send(res,req,&buff,1,addr,on_send);
    }
    free(buf->base);
}
static void alloc_buffer(uv_handle_t *handle,size_t suggested_size,uv_buf_t *buf){
    puts(":::::ALLOC BUFFER::::::");
    (void)handle;
    buf->base = malloc(suggested_size);
    bzero(buf->base,suggested_size);
    buf->len = suggested_size;
}
uv_udp_t* init_echo_udp_server(uv_loop_t *loop,const char* address,int port){
    puts(":::::INIT ECHO SERVER::::::");
    uv_udp_t *recv_socket = malloc(sizeof(uv_udp_t));
    struct sockaddr_in recv_addr;
    uv_ip4_addr(address,port,&recv_addr);
    uv_udp_init(loop,recv_socket);
    puts(":::::bind::::::");
    uv_udp_bind(recv_socket,(const struct sockaddr *)&recv_addr,UV_UDP_REUSEADDR);
    puts(":::::start::::::");
    uv_udp_recv_start(recv_socket,alloc_buffer,on_read);
    return recv_socket;
}
uv_loop_t *loop= 0;
int main(int argc,const char** argv){
    loop = uv_default_loop();
    uv_udp_t* udp_socket = init_echo_udp_server(loop,"0.0.0.0",UDP_SERVER_PORT);
    printf("----- SERVER LISTENING -----\n");
    printf("-> UDP port: %d\n",UDP_SERVER_PORT);
    uv_run(loop,UV_RUN_DEFAULT);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)