LIBSRT uses wrong write-readiness epoll on a listener socket
|Reported by:||Mikołaj Małecki||Owned by:|
|Cc:||Marton Balint||Blocked By:|
|Blocking:||Reproduced by developer:||no|
|Analyzed by developer:||no|
The epoll subscription for a listener socket uses the same method as for other modes, by waiting for write readiness. This works only due to a bug in LIBSRT, which will be fixed at some point. The event that should be checked ready on a listener socket should be the read-readiness, SRT_EPOLL_IN.
This is where the epoll is being created:
ret = write_eid = libsrt_epoll_create(h, fd, 1);
Then it is used in both branches for a listener socket and connected socket. For connecting (and rendezvous) socket it's ok, write-readiness defines connection-ready. For a listener socket it should use read-readiness, so creation of eid for the listener branch should be likely done separately, with "0" last parameter.