[ENet-discuss] ENet 1.2.2 work-in-progress
M. Rijks
enet at forge.dds.nl
Fri May 14 14:01:10 PDT 2010
Ah, I see. I suppose I can check channelCount to know the number of
channels ultimately allocated. I hadn't tried using enet_peer_send on
a channel that wasn't allocated, so I don't know its behavior in such
cases but I assume this means it will just return <0 (failure).
Excellent Lee, thank you very much for your efforts - much appreciated!
Martin
Quoting Lee Salzman <lsalzman1 at cox.net>:
> The behavior is pretty much as always: the connection effectively has
> only as many channels as the minimum of what both requested. If client
> requests 100, and server only wants 3, then both get only 3. If client
> wants 2, but server allows 16, both get only 2.
>
> Lee
>
> M. Rijks wrote:
>> Awesome! You've made at least one person on this globe do a happy dance. :)
>>
>> Just one question - what will the host do if the client attempts to
>> open more channels? I wouldn't want to refuse the connection,
>> because if you're an incompatible client you want to have at least
>> some basic communication to inform the client. I would merely want
>> to make sure incoming data on 'illegal' channels is dropped. Would
>> this be taken care of as well?
>>
>> Thanks!
>>
>> Martin
>>
>> Quoting Lee Salzman <lsalzman1 at cox.net>:
>>
>>> Well, I guess I'll just go with the API I have, rather than the API I
>>> want, so for better or worse:
>>>
>>> /** Limits the maximum allowed channels of future incoming connections.
>>> @param host host to limit
>>> @param channelLimit the maximum number of channels allowed; if 0,
>>> then this is equivalent to ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT
>>> */
>>> extern void enet_host_channel_limit (ENetHost * host, size_t channelLimit);
>>>
>>> :)
>>>
>>> Lee
>>>
>>> M. Rijks wrote:
>>>> Ah - forgive me but I thought that each channel was an
>>>> independent queue. It wasn't the opening of channels I was
>>>> concerned about, but more the fact that they may grow
>>>> extensively when piled up with (unwanted) incoming data.
>>>>
>>>> One (not so elegant) solution that does not break up the API is
>>>> to configure the channel limit separately, i.e. a new, separate
>>>> function call with which you can override the default limit of
>>>> 255 channels.
>>>>
>>>> Martin
>>>>
>>>>
>>>> Quoting Lee Salzman <lsalzman1 at cox.net>:
>>>>
>>>>> At one point that may have been an issue, but now there is no
>>>>> performance cost to the channels, just memory, and the limit is still
>>>>> at most 255 channels, and each channel is consuming 56 bytes of memory,
>>>>> so we're talking at worst 255*56==14280 bytes of wasted memory.
>>>>>
>>>>> Now, a channel limit parameter could probably be added to the
>>>>> enet_host_create() call, but this is at the cost of breaking the API
>>>>> for all existing ENet users. The question is, is this something people
>>>>> want badly enough to warrant that?
>>>>>
>>>>> Lee
>>>>>
>>>>> M. Rijks wrote:
>>>>>> As little as I have looked into Enet source I have no idea if
>>>>>> this constitutes a big change or a small change, but one thing
>>>>>> would definitely appreciate: in my understanding it is the
>>>>>> client who decides the number of channels to be opened at the
>>>>>> host. I'd like to be able to tell the host the maximum
>>>>>> number of channels a client is allowed to open, and simply
>>>>>> drop data that comes in on 'illegal' channels without queing
>>>>>> it in the channel.
>>>>>>
>>>>>> The reason I'd like to have this is that I'm trying to design a
>>>>>> multi-purpose game networking library on top of Enet, and
>>>>>> that it is theoretically possible for anyone to force-open
>>>>>> lots of channels on 'foreign' (different game) hosts, and
>>>>>> start hogging resources on that host. Knowing the developer
>>>>>> crowd I'm aiming at I know some will try and do just that to
>>>>>> try and bring someone's host down. :( I would also think this
>>>>>> could be a potential issue for any other Enet user if they
>>>>>> do not cater for any kind of protection themselves, but do
>>>>>> correct me if I am wrong.
>>>>>>
>>>>>> Thanks for considering,
>>>>>>
>>>>>> Martin
>>>>>>
>>>>>>
>>>>>> Quoting Lee Salzman <lsalzman1 at cox.net>:
>>>>>>
>>>>>>> Just so we're clear: this is NOT a release announcement. Didn't want to
>>>>>>> get your hopes up. :)
>>>>>>>
>>>>>>> But recently I added some features to ENet CVS that people were bugging
>>>>>>> me about, so I thought I'd just tell you all what they were if you were
>>>>>>> in need of them. Or maybe you just want to test them out and make sure
>>>>>>> they're stable (which they should be as far as I could test so far).
>>>>>>>
>>>>>>> 1. I fixed some places in the event dispatch where it was walking over
>>>>>>> all the channels to find appropriates packets to hand off to the user,
>>>>>>> such that is basically no longer does evil stuff like this. In other
>>>>>>> words: there is no longer any performance penalty for using high
>>>>>>> numbers of channels, per se, although it still needs to allocate memory
>>>>>>> for each channel, for each client, when you first create the host. But
>>>>>>> the dispatching costs of using them are gone.
>>>>>>>
>>>>>>> 2. I added a no_memory callback that allows you to override ENet's
>>>>>>> standard out-of-memory behavior, which was simply to call abort.
>>>>>>> Someone simply wanted the API functions to simply return errors in this
>>>>>>> case, and I revised some internals so that you can safely make a null
>>>>>>> no_memory handler and get that behavior. The default is just to call
>>>>>>> abort, which keeps ENet behaving as it always did, unless you decide to
>>>>>>> supply that callback.
>>>>>>>
>>>>>>> 3. I used the packed attribute on some sensitive protocol structures
>>>>>>> that were causing some protocol incompatibilities on platforms like
>>>>>>> ARM+GCC, which appeared to use much different alignment rules than what
>>>>>>> x86 and friends were.
>>>>>>>
>>>>>>> 4. Nathan Brinks contributed a less crufty autoconf build system.
>>>>>>>
>>>>>>> That out of the way, are there any not too difficult things people
>>>>>>> would like to see in 1.2.2?
>>>>>>>
>>>>>>> Lee
>>>>>>>
>>>>>>> ___
>
> _______________________________________________
> ENet-discuss mailing list
> ENet-discuss at cubik.org
> http://lists.cubik.org/mailman/listinfo/enet-discuss
More information about the ENet-discuss
mailing list