2017-08-13 70 views
0

使用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

回答

0

原來,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

現在它偵聽正確的端口。