Skip to content

Weird unidi streams behavior #209

Open
@essen

Description

@essen

For HTTP/3 I am expected to receive from at least 3 unidi streams.

I wrote a CT test that looks like this:

unidi_create_critical_first(Config) →
    {ok, Conn} = quicer:connect("localhost", config(port, Config),
        #{alpn ⇒ ["h3"], verify ⇒ none, peer_unidi_stream_count ⇒ 3}, 5000),
    {ok, Conn} = quicer:async_accept_stream(Conn, []),
    timer:sleep(1000),
    ct:pal("~p", [process_info(self(), messages)]),
    ct:pal("~p", [process_info(self(), messages)]),
    ok.

This prints the following:

----------------------------------------------------
2023-08-30 17:15:57.986
{messages,[{quic,streams_available,#Ref<0.3047038216.2871918595.261224>,
                 #{bidi_streams => 100,unidi_streams => 3}}]}


----------------------------------------------------
2023-08-30 17:15:57.986
{messages,[{quic,streams_available,#Ref<0.3047038216.2871918595.261224>,
                 #{bidi_streams => 100,unidi_streams => 3}},
           {quic,new_stream,#Ref<0.3047038216.2871918592.249713>,
                 #{flags => 1,is_orphan => false}},
           {quic,new_stream,#Ref<0.3047038216.2871918592.249714>,
                 #{flags => 1,is_orphan => true}},
           {quic,new_stream,#Ref<0.3047038216.2871918592.249715>,
                 #{flags => 1,is_orphan => true}},
           {quic,<<0,4,0>>,
                 #Ref<0.3047038216.2871918592.249713>,
                 #{absolute_offset => 0,flags => 0,len => 3}}]}

First thing I notice is that the first ct:pal somehow doesn't print all the messages, I'm not sure why that is. But not important for this issue. If I do a receive I receive all these messages in the order they are printed with no issue.

The first problem is that the single async_accept_stream call resulted in 3 unidi streams getting accepted. I did not expect that at all.

The second problem is that I am not receiving the data from the two other unidi streams, even if I put more async_accept_stream calls.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions