Idiomatic way to get from a socket2 Socket to a Tokio TcpStream

Hi all,

I’ve been playing with socket2 and whilst it has the ability to go from that to a standard TcpStream ( via into() ), I need it was the Tokio variant.

I was wondering what is the best to do this sort of double conversion. Or if there is a better way that I’m completely missing (very likely I feel :sweat_smile:)

Thanks!

It looks like you can convert from a std TcpStream to a tokio TcpStream with TcpStream::from_std

I was just coming back to say that I had found that and it seems to be working fine. I feel more confident in that choice now that you’ve highlighted it too :grin:

It didn’t show up in my original more naive search so hopefully this question will be easier to find for others like me in the future.

Thanks for your help, greatly appreciated!

1 Like

Ah, actually I ended up converting the socket2 SockAddr to Tokio’s TcpSocket. When you call connect on that, it returns a TcpStream.

I originally tried converting between the streams but the connect function in socket2, while being non blocking, doesn’t use Tokio to manage it, so I started looking deeper.

That’s when I found TcpSocket::from_std_stream(). With that I can set up why I need and then use connect on TcpSocket which uses Tokio directly :relaxed:

1 Like

If you create the socket using socket2, then going through std is the solution. Remember to set the non-blocking flag!

It's also possible to create it with Tokio, then modify it via socket2 using the SockRef type.