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
|
try Fd_tbl.find self.fds fd with Not_found -> assert false
|
||||||
in
|
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 (
|
if Flags.mem Flags.pollin flags then (
|
||||||
let r = fd_data.r in
|
let r = fd_data.r in
|
||||||
fd_data.r <- Nil;
|
fd_data.r <- Nil;
|
||||||
perform_cbs ~closed:false r
|
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
|
let w = fd_data.w in
|
||||||
fd_data.w <- Nil;
|
fd_data.w <- Nil;
|
||||||
perform_cbs ~closed:false w
|
perform_cbs ~closed:false w
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue