"conn" is just a value, you can pass it around.  However, if you're sharing 
it between multiple goroutines you need to be careful, i.e. you need to 
synchronize properly. The synchronization solutions are very specific to 
your application: e.g. you could wait for that goroutine to finish with a 
sync.WaitGroup, or the goroutine could send you a message on a channel when 
it's done.

I don't know why you want to use multiple goroutines on the *same* 
connection though.  (If you have multiple clients, they will open their own 
TCP connections, which will be different "conn" objects).

What you're now describing sounds very unlike "multiplexing", which I would 
normally understand to be sending multiple independent sessions down a 
single connection.

On Sunday, 21 August 2022 at 12:32:27 UTC+1 ramki...@hotmail.com wrote:

> My original issue is when using splice with  io.Copy (example below), for 
> me to regain access to conn, In a different go routine, I use 
> remote.Close() which ends the one of io.Copy commands but, the second 
> io.Copy ends when conn sends a new packet. The error  use of closed network 
> connection ends the io.Copy and every new packet conn sends, I can get with 
> conn.Read() but the previous one is lost. 
> I thought may be a multiplexer may help if I hope multiple streams for 
> conn, I can end the splice while still reading all data with conn.Read() 
> with a different stream.  
>
> io.Copy(conn, remote) 
> go io.Copy(remote, conn)
>
>
>
> On Sunday, August 21, 2022 at 5:17:37 AM UTC-4 harald....@gmx.net wrote:
>
>> do you even need a multiplexer? The common patten is to run Accept in a 
>> loop that simply starts a new Go routine for every new accepted connection. 
>> You only need a multiplexer of your application protocol needs multiplexing 
>> inside an established TCP connection, either because there are multiple 
>> destinations or multiple streams inside a single connection. 
>>
>>
>> On Saturday, August 20, 2022 at 10:31:34 PM UTC+2 ramki...@hotmail.com 
>> wrote:
>>
>>> Has anyone ever used a multiplexer <https://github.com/hashicorp/yamux>? 
>>> When creating a TCP server using multiplexer, I get an error [ERR] yamux: 
>>> Invalid protocol version: 102 when using Telnet to connect to the server.
>>>
>>> package main
>>>
>>> import (
>>>     "fmt"
>>>     "net"
>>>
>>>     "github.com/hashicorp/yamux"
>>> )
>>>
>>> func main() {
>>>     server()
>>> }
>>>
>>> func server() {
>>>
>>>     listener, _ := net.Listen("tcp", "0.0.0.0:1113")
>>>     for {
>>>
>>>         // Accept a TCP connection
>>>         conn, err := listener.Accept()
>>>         if err != nil {
>>>             panic(err)
>>>         }
>>>
>>>         // Setup server side of smux
>>>         session, err := yamux.Server(conn, nil)
>>>         if err != nil {
>>>             panic(err)
>>>         }
>>>
>>>         // Accept a stream
>>>         stream, err := session.Accept()
>>>         if err != nil {
>>>             panic(err)
>>>         }
>>>         fmt.Println("DPOO")
>>>
>>>         // Listen for a message
>>>         buf := make([]byte, 4)
>>>         stream.Read(buf)
>>>         stream.Close()
>>>         session.Close()
>>>     }
>>> }
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/36976305-5070-4917-ae9d-0d61bc698e9fn%40googlegroups.com.

Reply via email to