Intermittent bug with asyncio and MS Edge

Barry Scott barry at barrys-emacs.org
Tue Mar 24 14:39:50 EDT 2020



> On 24 Mar 2020, at 11:54, Frank Millman <frank at chagford.com> wrote:
> 
> On 2020-03-23 1:56 PM, Frank Millman wrote:
>> On 2020-03-23 12:57 PM, Chris Angelico wrote:
>>> On Mon, Mar 23, 2020 at 8:03 PM Frank Millman <frank at chagford.com> wrote:
>>>> 
>>>> On 2020-03-22 12:11 PM, Chris Angelico wrote:
>>>>> On Sun, Mar 22, 2020 at 8:30 PM Frank Millman <frank at chagford.com> wrote:
>>>>>> 
>>>>>> On 2020-03-22 10:45 AM, Chris Angelico wrote:
>>>>> 
>>>>> If you can recreate the problem with a single socket and multiple
>>>>> requests, that would be extremely helpful. I also think it's highly
>>>>> likely that this is the case.
>>>>> 
>>>> 
>>>> I am working on a stripped-down version, but I realise there are a few
>>>> things I have not grasped.
>>>> 
>>>> Hope you don't mind, but can you scan through what follows and tell me
>>>> if I am on the right lines?
>>> 
>>> No probs!
>>> 
>> [...]
>> Really appreciate the one-on-one tuition. I am learning a lot!
>>> 
>>>> If this all makes sense, I should write two versions of the client
>>>> program, one using a single connection, and one using a pool of connections.
>>>> 
>>> 
>>> Possibly! I think you'll most likely see that one of those behaves
>>> perfectly normally, and you only trigger the issue in the other. So
>>> you could move forward with just one test program.
>>> 
>> Well, I have got the first one working - single connection - and so far it has not gone wrong.
>> However, it is difficult to be sure that I am comparing apples with apples. I have written my test server to handle 'Keep-Alive' correctly, but as I mentioned earlier, my live program closes the connection after each transfer. So now I have to make my test server do the same, and change my test client to react to that and re-open the connection each time. I will make the changes and see how that behaves.
>> Of course now I am in the murky waters of trying to second-guess how Edge reacts to that. Presumably that is where Wireshark will be useful. I will keep you posted.
> 
> Here is a progress report.
> 
> I decided to concentrate on using Wireshark to detect the difference between a Python3.7 session and a Python3.8 session. Already I can see some differences.
> 
> There is only one version of my program. I am simply running it with either 'py -3.7 ' or 'py -3.8'. And I am ignoring Chrome at this stage, as it is only that Edge shows the problem.
> 
> First point - Python3.7 also shows a lot of [RST, ACK] lines. My guess is that this is caused by my 'protocol violation' of sending a 'Keep-Alive' header and then closing the connection. Python3.7 does not suffer from dropping files, so I now think this is a sidetrack. I will fix my program when this is all over, but for now I don't want to touch it.

Yes your protocol violation is why you see [RST, ACK].

I'm confused you know that the code has a critical bug in it and you have not fixed it?
Just send "Connection: close" and I'd assume all will work.

If my last message was not clear let me know what is unclear.

It not interesting that you get away with it in 3.7 and not 3.8 because the code is wrong.

> When I send the response to the initial connection, I write a status line, then multiple header lines, then an html file. I then close the connection. Python3.7 sends a packet with the status, then a separate packet for each header, then a packet with the file. Python3.8 sends a packet with the status, then merges everything else into a single packet and sends it in one go. I just mention this as an indication that quite a lot has changed between my two versions of Python.
> 
> I have one frustration with Wireshark. I will mention it in case anyone has a solution.
> 
> I can see that Edge opens multiple connections. I am trying to track the activity on each connection separately. I can export the data to csv, which makes it easier to work on. But while the TCP lines include the source and destination ports, the HTTP lines do not, so I don't know which connection they belong to. If I view the data in Wireshark's gui it does show the ports, so the data is there somewhere. Does anyone know how to include it in the csv output?

There is a option to follow a single TCP or HTTP connection in Wireshark.
Right click on one pf the packets then choose Follow/HTTP stream.

The way to share the data is as a PCAP file that allows someone else to look at the capture
with tools like wireshark and others.

> 
> That's all for now. I will keep you posted.

Barry

> 
> Frank
> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list <https://mail.python.org/mailman/listinfo/python-list>


More information about the Python-list mailing list