2017-08-13 13 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") 'を実行し、成功しました。互換性のないライブラリは非難されるべきです! – packetie

答えて

0

ubuntu 14.04のデフォルトのlibuv-devはバージョン0.10です。最新のlibuvをインストールするには以下の手順に従ってください。

  • 須藤はapt-getをパージlibuv-devの
  • は./configure
  • libuv次のステップ
  • gitのクローンhttps://github.com/libuv/libuv.git
  • CDを行うためのディレクトリを選択するにsudo
  • を作りますmake install
  • gcc libuv_example.c -luv

今すぐ正しいポートで待機します。

関連する問題