【问题标题】:libuv based tcp server not listening on specified port基于 libuv 的 tcp 服务器未侦听指定端口
【发布时间】:2023-03-11 17:28:01
【问题描述】:

使用 libuv 编写了一个 TCP 服务器,它没有监听正确的端口。 例如,以下内容应该在 TCP 端口 3005 上进行侦听,但根据在 Ubuntu 14.04 上运行的命令 netstat -antp | grep LISTEN 的输出,它似乎正在侦听随机端口。我不是3005端口不被占用。

知道为什么吗?

#include <stdio.h>
#include <stdlib.h>
#include <uv.h>
#define DEFAULT_PORT 3005
#define DEFAULT_BACKLOG 1000
uv_loop_t *loop;

void on_new_connection(uv_stream_t *server, int status) {
}
int main() {
    loop = uv_default_loop();

    uv_tcp_t server;
    uv_tcp_init(loop, &server);

    struct sockaddr_in addr;
    uv_ip4_addr("0.0.0.0", DEFAULT_PORT, &addr);
    int r;
    r = uv_tcp_bind(&server, (const struct sockaddr*)&addr, 0);
    r = uv_listen((uv_stream_t*) &server, DEFAULT_BACKLOG, on_new_connection);
    if (r) {
        fprintf(stderr, "Listen error %s\n", uv_strerror(r));
        return 1;
    }
    return uv_run(loop, UV_RUN_DEFAULT);
}

【问题讨论】:

  • 您未能对bind() 调用提供任何错误检查。当你解决这个问题时,你会得到答案。
  • @EJP 没错。在致电uv_tcp_bind(..) 之后,我做了perror("bind") 并取得了成功。不兼容的库是罪魁祸首!!

标签: c networking tcp libuv


【解决方案1】:

原来 ubuntu 14.04 的默认 libuv-dev 是 0.10 版本。运行以下步骤来安装最新的 libuv,效果很好。

  • sudo apt-get purge libuv-dev
  • 选择一个目录来执行以下步骤
  • git 克隆https://github.com/libuv/libuv.git
  • cd libuv
  • ./配置
  • 制作
  • sudo make install
  • gcc libuv_example.c -luv

现在它侦听正确的端口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 2016-01-24
    • 1970-01-01
    • 2021-12-15
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多