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);
}
あなたは 'bind()'呼び出しでエラーチェックを提供できませんでした。それを修正すると、あなたはあなたの答えを得るでしょう。 – EJP
@EJPそうです。私は 'uv_tcp_bind(..) 'の呼び出しの後に' perror( "bind") 'を実行し、成功しました。互換性のないライブラリは非難されるべきです! – packetie