問題タブ [gen-tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
67 参照

c++ - gen_tcp:send/2 を使用して送信されたデータの受信

gen_tcp:send/2 を使用してデータを送信している erlang クライアントがあります。

具体的にはこんな感じで送ってくれますが、

メッセージを受信する c++ ベースの tcp サーバーがあります。クライアントが term_to_binary/1 を使用して送信できた場合、ei_decode_X を使用してデコードできたはずです。この特定のメッセージを受信して​​解析する方法がわからない。つまり、メッセージ、A、B の値を知っている必要があります。

を使用してこのデータを受け取ります

そのように送信すると、データがまったく受信されていないことがわかります。しかし、term_to_binary/1 に変換して送信すると、データを受信できます。

データを送信する適切な方法ですか?

ありがとう

0 投票する
1 に答える
351 参照

sockets - gen_tcp で多数の接続を並行して確立すると CLOSED エラーが発生する (バグ?)

多数の TCP 接続を並行して確立しようとすると、潜在的なバグと思われる奇妙な動作が見られgen_tcpます。

シナリオは、複数の同時アクセプターを持つポートでリッスンするサーバーです。クライアントから を呼び出して接続を確立しgen_tcp:connect/3、その後サーバーに「Ping」メッセージを送信し、パッシブ モードで「Pong」応答を待ちます。「get_tcp:connect/3」呼び出しを連続して実行すると、多数の接続 (最大 28000 までテストしました) を含め、すべて正常に動作します。

この問題は、多数の接続を並行して確立しようとすると発生します (マシンによっては、75 ~ 数百の間)。ほとんどの接続は引き続き確立されますが、一部の接続はclosedエラーで失敗しますgen_tcp:recv/3。奇妙なことに、これらの接続は以前は失敗せず、 と の呼び出しgen_tcp:connect/3gen_tcp:send/2両方とも成功していました (つまり、 が返されましたok)。サーバー側では、これらの「奇妙な」接続に一致する接続が表示されません。つまり、返されませんgen_tcp:accept/1。私の理解では、「get_tcp:connect/3」が成功すると、サーバー側で一致する受け入れられた接続が得られるはずです。

私はすでにバグ レポートを提出しました。そこには、より詳細な説明と、問題を示す最小限のコード例があります。Linux と Mac OS X で問題を再現し、Erlang の異なるバージョンを使用することができました。

ここでの私の質問は次のとおりです。

  1. 誰でも問題を再現でき、これが誤った動作であることを確認できますか?
  2. 回避策のアイデアはありますか? この問題に対処するには、すべての接続を順番に開始する必要があります (これには永遠に時間がかかります)。
0 投票する
1 に答える
958 参照

erlang - gen_tcp を使用して Elixir のアクティブなソケットで TCP タイムアウトを検出するにはどうすればよいですか?

GenServer経由でリモート TCP 接続に接続している がありますgen_tcp

opts = [:binary, active: true, packet: :line] {:ok, socket} = :gen_tcp.connect('remote-url', 8000, opts}

私はメッセージを処理しています:

def handle_info({:tcp, socket, msg}, stage) do IO.inspect msg {:noreply, state} end

これはうまくいきます。ただし、TCP サーバーはタイムアウトしがちです。を使用している場合はgen_tcp.recv、タイムアウトを指定できます。ただし、 でactive: trueメッセージを受信するために使用しhandle_infoており、ループして呼び出す必要はありませんrecv。そのGenServerため、サーバーがタイムアウトした場合でも、次のメッセージを喜んで待ちます。

GenServerX 秒後に TCP 接続からメッセージを受信して​​いない場合、関数をトリガーするにはどうすればよいですか? 私は使用して立ち往生していrecvますか?

0 投票する
1 に答える
121 参照

tcp - gen_tcp 経由で ether/ip ヘッダーを取得する方法はありますか?

着信メッセージの本文だけでなく取得する方法はありますか。だけでなくether/IP、それのヘッダー?現在gen_tcp、アクティブな制御プロセスによってメッセージを使用および受信しています。

今のところ、ソケットは「of_driver」を介して次のように開かれます。