问题描述
当我开始收听传入消息时遇到问题, 服务器卡在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 (将#修改为@)