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