That certainly looks like it should work.

On Thu, Feb 2, 2017 at 2:12 AM, Jörg Krause <[email protected]>
wrote:

> Hey Ryan,
>
> On Sunday, January 29, 2017 at 8:04:42 PM UTC+1, Ryan Phillips wrote:
>>
>> Hey Jörg,
>>
>> In your doConnect function you will want to instantiate a new socket
>> there. You can't reuse the same socket instance.
>>
>
> I changed my client implementation and it seems to work now:
>
> local fs = require('fs')
> local spawn = require('childprocess').spawn
> local net = require('net')
>
> local args = {
>   "-M",
>   "-D", "record_left",
>   "-t", "raw",
>   "-c", "1",
>   "-r", "48000",
>   "-f", "S16_LE",
> }
>
> local function doConnect()
>   local arecord
>   local sock
>
>   local ip = "192.168.0.101"
>   local port = 1234
>
>   if not ip or not port then return end
>
>   print(string.format("Connecting to %s:%s", ip, port))
>   sock = net.createConnection(port, string.format("%s", ip))
>
>   sock:on("connect", function (err)
>     if err then print("Connection error:", err) end
>     print("Connected")
>
>     arecord = spawn("arecord", args)
>
>     arecord:on("error", function(err)
>       print("Spawn error:", err)
>     end)
>     arecord:on("exit", function(exit_status)
>       print("Exit with " .. exit_status)
>       sock:setTimeout(1000, doConnect)
>     end)
>
>     arecord.stdout:on('data', function(data)
>       sock:write(data)
>     end)
>     arecord.stderr:pipe(process.stderr)
>   end)
>
>   sock:on("error", function(err)
>     if err then
>       print("Socket error:", err)
>       if arecord then
>         arecord:kill('sigkill')
>       else
>         sock:setTimeout(1000, doConnect)
>       end
>     end
>   end)
> end
>
> doConnect()
>
> However, I am not sure if it is done correct. Maybe this implementation
> still has some flaws?
>
>
>
>> On Wed, Jan 18, 2017 at 10:52 AM, Jörg Krause <[email protected]>
>> wrote:
>>
>>> Hi,
>>>
>>> I am trying to implement a client which tries to reconnect to server if,
>>> for whatever reason, is not available sometimes. My application is about
>>> piping the stdout of arecord to a TCP socket on a server. The application
>>> works fine, but is not bullet-proof if the server is not ready or is
>>> restarted. I want the client to reconnect to the server, without the need
>>> of a process monitor on the client side.
>>>
>>> I found a similar nodejs example: https://gist.github.c
>>> om/sio2boss/6334089
>>>
>>> local spawn = require('childprocess').spawn
>>> local net = require('net')
>>>
>>> local args = {
>>>   "-M",
>>>   "-D", "hw:0,1",
>>>   "-t", "raw",
>>>   "-c", "2",
>>>   "-r", "48000",
>>>   "-f", "S16_LE",
>>> }
>>>
>>> local sock
>>> sock = net.Socket:new()
>>>
>>> local function doConnect()
>>>   print("Connecting...")
>>>
>>>   sock:connect(1234, '192.168.1.157')
>>> end
>>>
>>> local function onConnect()
>>>   print("Connected")
>>>   local arecord
>>>
>>>   arecord = spawn("arecord", args)
>>>
>>>   arecord:on("error", function(err)
>>>     print("Spawn error:", err)
>>>   end)
>>>   arecord:on("exit", function(exit_status)
>>>     print("Exit with " .. exit_status)
>>>   end)
>>>
>>>   arecord.stdout:pipe(sock)
>>>   arecord.stderr:pipe(sock)
>>> end
>>>
>>> local function onError(err)
>>>   print("Socket error:", err)
>>>   if err == 'ECONNREFUSED' then
>>>     sock:setTimeout(1000, doConnect)
>>>   elseif err == 'EPIPE' then
>>>     sock:setTimeout(1000, doConnect)
>>>   end
>>> end
>>>
>>> sock:on("connect", onConnect)
>>> sock:on("error", onError)
>>>
>>> doConnect()
>>>
>>>
>>> The client tries one time to reconnect, but not more:
>>>
>>> # luvit client.lua
>>> Connecting...
>>> Socket error: ECONNREFUSED
>>> Connecting...
>>> #
>>>
>>> Any idea what is wrong with my code?
>>>
>>> Best regards,
>>> Jörg Krause
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "luvit" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "luvit" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"luvit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to