2017-01-28 2 views

答えて

0

質問はわずかとして再定式化することができます。

アウトファイルディスクリプタを抽出ハンドルの

皮肉なことに、これは移行ガイドのセクションのタイトルですo libuv 1.0(詳細はhereを参照してください)。バージョン1.0の前に

は、それは次のようにそれを行うための方法は、ライブラリの内部にアクセスしてお勧めしません。

handle->io_watcher.fd 

libuv v1.0を、お勧めの方法は、代わりにuv_filenoを使用しているので。
文書に記載されている内容は次のとおりです。

相当するプラットフォームに依存するファイル記述子を取得します。
TCP、パイプ、TTY、UDP、およびポーリングの各ハンドルがサポートされています。 [...]

したがって、どのバージョンのlibuvを使用しているかは、ハンドルから取り出す最良の方法です。

-1

クライアントのuv_fileno機能をクライアントのuv_streamに使用できます。 Linuxとダーウィンで

次の操作を行うことができるように返さuv_os_fd_tは、intの別名である:

uv_tcp_t *client; 
int conn_s; 

// ... 

uv_accept(server, (uv_stream_t*) client); 
uv_fileno((uv_handle_t *)client, &conn_s); 
printf("%d", conn_s); 
+1

これは、スタイルが悪く、 'typedef'が' int'以外のものに変更された場合、未定義の動作を呼び出します。 'uv_handle_t'を使ってコンパイラを変換させます。これにより、コンパイル時に変換の潜在的な問題を報告することができます。 – Olaf

+0

ありがとう、あなたは答えとして書くことができますか? – Midiparse

+0

しかし、私はあなたの懸念を理解していません。コンパイラは、変換に問題があるかどうかを報告します。 タイプ のパラメータに '*長い' 合格 互換性のないポインタ型 'uv_os_fd_t *'(別名 'int型*')[-Wincompatible-ポインタの種類]を:;私は長いconn_s 'に変更した場合、'、それは '警告できますuv_fileno((uv_handle_t *)client、&conn_s); ' – Midiparse

関連する問題