Size: a a a

2021 April 12

МВ

Михаил Варнавский... in pro.elixir
а как это сделать? )
источник

VS

Vladimir Sekisov in pro.elixir
что-то типа такого
clear_channel(Transport, Socket, Timeout) ->
   case Transport:recv(Socket, 0, Timeout) of
       {error, timeout} ->
           ok;
       {ok, _Data} ->
           clear_channel(Transport, Socket, Timeout)
   end.
источник

VS

Vladimir Sekisov in pro.elixir
это я из своего модуля для modbus копирую,
когда-то тоже с RS-232/Ethernet работал
источник

МВ

Михаил Варнавский... in pro.elixir
понял, пробовал подобное, но ради того, чтобы посмотреть, в какое количество recv все это дело превращается, но фишка в том, что на втором recv он останавливается и ждет просто
источник

VS

Vladimir Sekisov in pro.elixir
для этого у recv есть timeout
источник

МВ

Михаил Варнавский... in pro.elixir
тю, точно,  сейчас попробую
источник

МВ

Михаил Варнавский... in pro.elixir
ну сейчас вот так сделал, типа прием до таймаута, все равно мало байт присылает
  def recv_loop(socket, _data) do
   case :gen_tcp.recv(socket, 0, 1000) do
     {:ok, line} ->
       IO.inspect(line)
       recv_loop(socket, [])

     {:error, reason} ->
       IO.puts(inspect(reason))
   end
 end
источник

МВ

Михаил Варнавский... in pro.elixir
вайршарк говорит, что приходит 4 пакета, как их потом путти собирает - вот вопрос. У меня убеждение, что нехватает какого-то паарметра
источник

МВ

Михаил Варнавский... in pro.elixir
в целом получилось у тебя, норм?
источник

VS

Vladimir Sekisov in pro.elixir
нормально работал, еще параметры самого адаптера, у них обычно есть вебка,
надо посмотреть, понять, как он хочет работать.
источник

VS

Vladimir Sekisov in pro.elixir
параметры были такие:
[binary, {active, false}, {packet, raw}, {nodelay, true}]
источник

МВ

Михаил Варнавский... in pro.elixir
хм, все равно не то присылает. Не пойму, если в самой железке что-то не то, то почему Putty норм отрабатывает...
источник

VS

Vladimir Sekisov in pro.elixir
зачем гадать, снимайте трейс
источник

DP

Dmitry Ponyatov in pro.elixir
источник

МВ

Михаил Варнавский... in pro.elixir
трейс то снял, сижу раскуриваю его
источник

МВ

Михаил Варнавский... in pro.elixir
разобрался. В итоге приходит 2 пакета, которые просто нужно объединить
источник

МВ

Михаил Варнавский... in pro.elixir
что-то вроде
  def recv_loop(socket, data) do
   case :gen_tcp.recv(socket, 0, 500) do
     {:ok, line} ->
       # IO.inspect(line)
       recv_loop(socket, data ++ line)

     {:error, reason} ->
       IO.inspect(data)
       IO.puts(inspect(reason))
       data
   end
 end
источник

V

V in pro.elixir
Прикольно. А если три пакета придёт?
источник

МВ

Михаил Варнавский... in pro.elixir
Ну в данном случае оно соберёт все данные
источник

МВ

Михаил Варнавский... in pro.elixir
Задержка в 0.5 сек великовата, на мой взгляд, ну тут уже от конкретного случая отталкиваться надо.
источник