Use epoll but still lose packet

lampahome pahome.chen at mirlab.org
Wed Nov 20 20:46:32 EST 2019


Dennis Lee Bieber <wlfraed at ix.netcom.com> 於 2019年11月21日 週四 上午2:17寫道:

> On Wed, 20 Nov 2019 18:51:31 +0800, lampahome <pahome.chen at mirlab.org>
> declaimed the following:
>
> >
> >I only use a while loop to catch events like below:
> >import select, socket
> >sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> >sock.bind()
>
>         Documentation indicates that one must provide an address (ip,
> port) for
> the bind -- there is no default described.
>
> sorry, I just write a brief code so I don't write whole detail ex: (ip,
port). But it can receive any connection and bind successfully.


> >sock.listen(10)
>
>         You've specified that 10 connections can be held in the backlog,
> any
> beyond that will be refused.
>
> But there's one client and it send 128 messages with different length.


> for fd,event in events:
> >  if event & select.EPOLLIN:
> >    sock.recv(1024)
> >...
>
>         Documentation is a bit week -- there is no description of what
> .poll()
> returns in the help file.
>
>         Point #1: you are using STREAM => implies TCP. TCP is not a
> "message"
> related protocol. Multiple "sends" can be one "receive" packet. One "send"
> can also be multiple "receive" packets. You truncated anything that would
> show if your processing is parsing out some high-level protocol showing the
> handling of such combined or split packets.
>
> Maybe this is the point! Multiple sends which doesn't full a 1024-length
buffer will make me receive one packet.


>         Also, the help system links to
> https://linux.die.net/man/4/epoll
> which has
> """
> Q7
>     If more than one event comes in between epoll_wait(2) calls, are they
> combined or reported separately?
> A7
>     They will be combined.
> """
>


More information about the Python-list mailing list