Forgot to add: On localhost I don't have any issues, it happens when 
writing to somewhere else.

Am Sonntag, 23. Februar 2014 23:34:39 UTC+1 schrieb Guido van Rossum:
>
> I haven't been able to repro this using the test you attached to issue 
> 153. But I don't have another machine available, I've only tried localhost 
> on OSX (10.9) and from that same box to a local virtual machine running 
> Ubunu. The receiving end just throws away the data -- is that your test 
> setup too? I used "while 1: s.recv(10000); n += 1" in an interactive Python 
> shell.
>
> I do see packet loss (just counting packets received and packets sent) but 
> no exceptions nor does pause_writing() ever get called. From putting some 
> print()s in the code it looks like the sendto() operation always 
> immediately succeeds.
>
> The errno has a name: errno.ENOBUFS -- it's 55 on OSX, but 105 on Ubuntu.
>
> Perhaps you can elaborate on your test setup?
>
>
> On Sun, Feb 23, 2014 at 11:29 AM, Christopher Probst <
> foxnet.d...@googlemail.com <javascript:>> wrote:
>
>> Ok, I tried it now with 180 bytes packet and it does not occur, I guess 
>> that my lan connection(gigabit) is too fast that those packets get queued 
>> up. Or OSX decide whether or not to queue those packets based on the size. 
>> But this seems to be heavily os dependent .
>>
>> Am Sonntag, 23. Februar 2014 20:12:46 UTC+1 schrieb Guido van Rossum:
>>>
>>> Have you tried reducing the write buffer size?
>>> On Feb 23, 2014 10:41 AM, "Christopher Probst" <foxnet.d...@googlemail.
>>> com> wrote:
>>>
>>>> I saw this in the official 3.4rc1 doc.
>>>>
>>>> The doc says, that flow-control callbacks are valid for Protocols and 
>>>> SubprocessProtocols, but DatagramProtocol is not specified.
>>>>
>>>> Though I'm happy that Datagram control flow is officially supported I 
>>>> have now an other problem which is directly connected with this issue.
>>>> Using OSX10.9.1 and python 3.3 sending a lot of udp packets actually 
>>>> does not cause the flow-control to be activated but throws an OSError(55 
>>>> *No 
>>>> buffer space available)* .
>>>>
>>>> After googling around for hours I found out that this is a BSD(probably 
>>>> OS X only) thing. On linux the control-flow works as expected. 
>>>>
>>>> I listed an issue for this in your tulip repo:
>>>> Issue 153 <https://code.google.com/p/tulip/issues/detail?id=153>
>>>>
>>>> I think that this is really not a python bug, but the way BSD/OSX 
>>>> handles too much udp packets (the socket sdnbuf option is kind of ignored 
>>>> by OSX). I've read that windows actually handles udp overload in a 
>>>> similiar 
>>>> way as BSD does. Though i don't have a windows machine this should 
>>>> probably 
>>>> be tested to confirm or disprove this issue.
>>>>
>>>> PS:
>>>> 18.5.3.2.5. Flow control 
>>>> callbacks<http://docs.python.org/3.4/library/asyncio-protocol.html#flow-control-callbacks>
>>>>  
>>>>
>>>> These callbacks may be called on 
>>>> Protocol<http://docs.python.org/3.4/library/asyncio-protocol.html#asyncio.Protocol>
>>>>  and 
>>>> SubprocessProtocol<http://docs.python.org/3.4/library/asyncio-protocol.html#asyncio.SubprocessProtocol>
>>>>  instances:
>>>> BaseProtocol.pause_writing()<http://docs.python.org/3.4/library/asyncio-protocol.html#asyncio.BaseProtocol.pause_writing>
>>>>  
>>>>
>>>> Called when the transport’s buffer goes over the high-water mark.
>>>> BaseProtocol.resume_writing()<http://docs.python.org/3.4/library/asyncio-protocol.html#asyncio.BaseProtocol.resume_writing>
>>>>  
>>>>
>>>> Called when the transport’s buffer drains below the low-water mark.
>>>>
>>>>
>>>>
>>>>
>>>> Am Sonntag, 23. Februar 2014 18:56:42 UTC+1 schrieb Guido van Rossum:
>>>>>
>>>>> This looks like a bug in the docs; the intention is that datagram 
>>>>> protocols also support flow control. Where does it say so in the docs? Is 
>>>>> it the PEP or the CPython Doc tree?
>>>>>
>>>>>
>>>>> On Sat, Feb 22, 2014 at 5:12 PM, Christopher Probst <
>>>>> foxnet.d...@googlemail.com> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> after looking into the implementation I saw that, for instance, _
>>>>>> SelectorDatagramTransport calls _maybe_pause_protocol and it's 
>>>>>> counterpart, but the doc says that only Protocol and SubprocessProtocol 
>>>>>> has 
>>>>>> flow-control support and DatagramProtocol does not.
>>>>>>
>>>>>> I know that udp flow-control is not the same as tcp flow-control, but 
>>>>>> I'm concerned about filling up the internal buffer when writing a lot of 
>>>>>> datagrams. If this is not supported, I would argue that the udp 
>>>>>> support is pretty much broken for data intense application because how 
>>>>>> would the writer know when the internal buffer (and/or kernel level 
>>>>>> buffer) 
>>>>>> are full ?
>>>>>>
>>>>>> So, is the doc just not up-to-date or is it an implementation detail 
>>>>>> of tulip ?
>>>>>>
>>>>>>  And other question that came up: Are there any plans for coroutine 
>>>>>> methods for udp (like StreamWriter/Reader for TCP) ? 
>>>>>>
>>>>>> Also, are there any "dirty" corners somebody heavily working with udp 
>>>>>> have to know ? I'm implementing reliable udp and I would like to use the 
>>>>>> coroutine style instead of callbacks.
>>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Chris
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>> --Guido van Rossum (python.org/~guido) 
>>>>>
>>>>
>
>
> -- 
> --Guido van Rossum (python.org/~guido) 
>

Reply via email to