mirror of
https://github.com/c-cube/nanoev.git
synced 2025-12-05 19:00:35 -05:00
fix: handle POLLERR and POLLNVAL in posix backend
This commit is contained in:
parent
8e809c8b8f
commit
dc7f2ec92e
1 changed files with 21 additions and 1 deletions
|
|
@ -382,12 +382,32 @@ let step (self : st) : unit =
|
|||
try Fd_tbl.find self.fds fd with Not_found -> assert false
|
||||
in
|
||||
|
||||
(* errors *)
|
||||
if Flags.mem Flags.pollnval flags || Flags.mem Flags.pollerr flags then (
|
||||
(* pollerr: error
|
||||
pollnval: fd is invalid, which we take as meaning that it's been closed. *)
|
||||
let r = fd_data.r in
|
||||
fd_data.r <- Nil;
|
||||
perform_cbs ~closed:true r;
|
||||
let r = fd_data.r in
|
||||
fd_data.r <- Nil;
|
||||
perform_cbs ~closed:true r
|
||||
);
|
||||
|
||||
(* reads *)
|
||||
if Flags.mem Flags.pollin flags then (
|
||||
let r = fd_data.r in
|
||||
fd_data.r <- Nil;
|
||||
perform_cbs ~closed:false r
|
||||
);
|
||||
if Flags.mem Flags.pollout flags then (
|
||||
|
||||
(* writes *)
|
||||
if Flags.mem Flags.pollhup flags then (
|
||||
(* incompatible with pollout *)
|
||||
let r = fd_data.w in
|
||||
fd_data.w <- Nil;
|
||||
perform_cbs ~closed:false r
|
||||
) else if Flags.mem Flags.pollout flags then (
|
||||
let w = fd_data.w in
|
||||
fd_data.w <- Nil;
|
||||
perform_cbs ~closed:false w
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue