[ENet-discuss] ENet - desconnection in 30 seconds after connection.

Вячеслав Блинников slavmfm at gmail.com
Fri Nov 5 08:12:30 PDT 2010


It's steal unclear. In case "enet_host_service()" returns on any event
- so it will be perfect if I will set the "infinite" time for it
because I do not need to do something when no messages occur. Other
libraries with suct interface behave as I said ("windows messages",
for example).
What is happening with the messages which appear when
enet_host_service() is not run (between it's calls)?

5 ноября 2010 г. 18:01 пользователь Nuno Silva
<little.coding.fox at gmail.com> написал:
> As far as i know ENet isnt thread-safe, so it's probably a bad idea to do
> that.
> enet_host_service will wait for events, until a certain timeout, or until an
> event is triggered. So, if you dont want any lag on your events, you should
> limit the timeout to something small like e.g., 25-50, which is very little
> compared to 1000.
>
> 2010/11/5 Вячеслав Блинников <slavmfm at gmail.com>
>>
>> Thank you very much! It works now!
>> Is it right calling that function in the separate thread? Like that:
>>
>> void* ENetHostService(void* client)
>> {
>>        ENetHost* castClient    = (ENetHost*)client;
>>        ENetEvent event;
>>
>> ENET_HOST_SERVICE:
>>        enet_host_service(castClient, &event, 1000);
>>        goto ENET_HOST_SERVICE;
>> }
>>
>> But I think I have some lags in messages sending - what is the point
>> in third param to enet_host_service()? Does not this function returns
>> (do it's job (message sending in our case)) just in moment when
>> enet_peer_send() where called? Or it will wait 1000 milliseconds
>> anyway?
>>
>> So, am I right in the whole structure (calling enet_host_service()
>> permanently in different thread) or there are better ways? And is it
>> alrignt thet I do not use mutexes when call enet_peer_send()?
>>
>> 5 ноября 2010 г. 17:10 пользователь Nuno Silva
>> <little.coding.fox at gmail.com> написал:
>> > Hey there.
>> > On your while(true) on the client you must also call enet_host_service
>> > in
>> > order for the client to keep its connection alive.
>> >
>> > 2010/11/5 Вячеслав Блинников <slavmfm at gmail.com>
>> >>
>> >> Hello!
>> >>
>> >> I wrote the base client accordingly the tutorial and the client which
>> >> read inputting through console characters and send it to the server.
>> >> Everything is fine but just first 30 seconds - then happen the
>> >> disconnection (message "Client information disconnected" shown).
>> >> What is wrong with my code?
>> >>
>> >>
>> >>
>> >> Server code:
>> >>
>> >> #include <cstdio>
>> >> #include "enet\enet.h"
>> >> int main(int argc, int** argv)
>> >> {
>> >>        if (enet_initialize () != 0)
>> >>    {
>> >>        printf ("An error occurred while initializing ENet.\n");
>> >>        goto END;
>> >>    }
>> >>        ENetAddress address;
>> >>        address.host = ENET_HOST_ANY;
>> >>        address.port = 1234;
>> >>        ENetHost* server = enet_host_create (   & address, 32, 2, 0, 0);
>> >>    if (server == NULL)
>> >>    {
>> >>        printf("An error occurred while trying to create an ENet
>> >> client host.\n");
>> >>        goto END;
>> >>    }
>> >>        ENetEvent event;
>> >> WAIT_FOR_AN_EVENT:
>> >>        enet_host_service(server, &event, 5);
>> >>        switch (event.type)
>> >>        {
>> >>        case ENET_EVENT_TYPE_CONNECT:
>> >>                printf ("A new client connected from %x:%u.\n",
>> >> event.peer
>> >> ->
>> >> address.host, event.peer -> address.port);
>> >>                event.peer -> data = "Client information";
>> >>                break;
>> >>
>> >>        case ENET_EVENT_TYPE_RECEIVE:
>> >>                printf ("A packet of length %u was received from %s on
>> >> channel %u.
>> >> Containings:\n  %s", event.packet -> dataLength, event.peer -> data,
>> >> event.channelID, event.packet -> data);
>> >>                enet_packet_destroy (event.packet);
>> >>                break;
>> >>
>> >>        case ENET_EVENT_TYPE_DISCONNECT:
>> >>                printf ("%s disconected.\n", event.peer -> data);
>> >>                event.peer -> data = NULL;
>> >>                break;
>> >>
>> >>        case ENET_EVENT_TYPE_NONE:
>> >>                break;
>> >>        }
>> >>        goto WAIT_FOR_AN_EVENT;
>> >>
>> >>        printf("host halted.\n");
>> >>
>> >> END:
>> >>        getchar();
>> >>        return 0;
>> >> }
>> >>
>> >>
>> >>
>> >> Client code:
>> >>
>> >> #include <cstdio>
>> >> #include "enet\enet.h"
>> >> #include <vector>
>> >> int main(int argc, int** argv)
>> >> {
>> >>        //where reading console data will be stored:
>> >>        std::vector<char> buffer;
>> >>
>> >>        if (enet_initialize () != 0)
>> >>    {
>> >>        printf ("An error occurred while initializing ENet.\n");
>> >>        goto END;
>> >>    }
>> >>        ENetHost* client        = enet_host_create ( NULL, 1, 2, 57600 /
>> >> 8,
>> >> 14400 / 8);
>> >>        if(client == 0l)
>> >>        {
>> >>                printf("An error occurred while trying to create an ENet
>> >> server host.\n");
>> >>                goto END;
>> >>        }
>> >>        ENetAddress address;
>> >>        enet_address_set_host(&address, "localhost");
>> >>        address.port    = 1234;
>> >>
>> >>        ENetPeer* peer  = enet_host_connect(client, &address, 2, 0);
>> >>        if(peer == 0l)
>> >>        {
>> >>                printf("No available peers for initiating an ENet
>> >> connection.\n");
>> >>                goto END;
>> >>        }
>> >>
>> >>        ENetEvent event;
>> >>        if (enet_host_service (client, & event, 5000) > 0 && event.type
>> >> ==
>> >> ENET_EVENT_TYPE_CONNECT)
>> >>        {
>> >>                puts ("Connection to localhost:1234 succeeded.");
>> >>        }
>> >>        else
>> >>        {
>> >>                enet_peer_reset (peer);
>> >>
>> >>                puts ("Connection to localhost:1234 failed.");
>> >>                goto END;
>> >>        }
>> >>
>> >>        printf("Input some data which will be sent to server...\n");
>> >>
>> >> INPUT_DATA:
>> >>        buffer.clear();
>> >>        while(true)
>> >>        {
>> >>                char character = getchar();
>> >>                buffer.push_back(character);
>> >>                if(character == '\n')
>> >>                {
>> >>                        break;
>> >>                }
>> >>        }
>> >>        buffer.push_back('\0');
>> >>
>> >>        ENetPacket * packet = enet_packet_create(&buffer[0],
>> >> buffer.size(),
>> >> ENET_PACKET_FLAG_RELIABLE);
>> >>        enet_peer_send (peer, 0, packet);
>> >>        enet_host_flush(client);
>> >>        goto INPUT_DATA;
>> >>
>> >> END:
>> >>        getchar();
>> >>
>> >>        return 0;
>> >> }
>> >> _______________________________________________
>> >> ENet-discuss mailing list
>> >> ENet-discuss at cubik.org
>> >> http://lists.cubik.org/mailman/listinfo/enet-discuss
>> >
>> >
>> > _______________________________________________
>> > ENet-discuss mailing list
>> > ENet-discuss at cubik.org
>> > http://lists.cubik.org/mailman/listinfo/enet-discuss
>> >
>> >
>> _______________________________________________
>> ENet-discuss mailing list
>> ENet-discuss at cubik.org
>> http://lists.cubik.org/mailman/listinfo/enet-discuss
>
>
> _______________________________________________
> 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