基于libuv的tcp服务器不在指定的端口上侦听

问题描述:

使用libuv写了一个TCP服务器,它不在正确的端口上侦听。 例如,以下内容应该是侦听TCP端口3005,但它似乎根据在Ubuntu 14.04上运行的命令netstat -antp | grep LISTEN的输出在随机端口上侦听。我不是港口3005不采取。基于libuv的tcp服务器不在指定的端口上侦听

任何想法为什么?

#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); 
} 
+0

您无法对bind()调用提供任何错误检查。当你修复时,你会得到你的答案。 – EJP

+0

@EJP没错。我在调用uv_tcp_bind(..)后做了一个'perror(“bind”)'并且获得了成功。不兼容的lib将被指责! – packetie

原来,ubuntu 14.04的默认libuv-dev版本是0.10。按照以下步骤安装最新的libuv并且它工作得很好。

  • sudo易于得到净化libuv-dev的
  • 选择一个目录来完成下面的操作
  • 混帐克隆https://github.com/libuv/libuv.git
  • CD libuv
  • 的./configure
  • 使
  • 须藤make install
  • gcc libuv_example.c -luv

现在它侦听正确的端口。