KQueue and Fibers
Jacob Carlborg
doob at me.com
Fri Apr 9 18:37:43 UTC 2021
On 2021-04-09 11:00, rashir wrote:
> Goodmorning everyone,
> I'm trying to understand both Kqueue and Fiber's operation on Mac. Why
> don't I get the correct data as long as I read from the socket?
> It seems to be reading too early, but Kquue tells me that the socket is
> readable.
>
> ```D
> const bytesRead = recv(fd, b.ptr, readableAmount < b.length ?
> readableAmount : b.length, 0);
> writeln("read bytesRead: ", bytesRead, "readableAmount:",
> readableAmount, " errno:", errno);
> assert(bytesRead != EAGAIN && bytesRead != EWOULDBLOCK);
> ```
`recv` returns the number of bytes received or `-1` if an error
occurred. `EAGAIN` and `EWOULDBLOCK` are error codes. You should not
compare the value returned by `recv` with error codes. The error code
will be placed in `errno`.
> ```D
> assert(eventList[0].filter & EVFILT_READ);
> ```
The `filter` field of an event is not a flag/bit field. It's just a
plain value, you should use `==` to check if it's a read event.
I'm not sure if fixing these things will solve your issue. But at least
some problems I noticed.
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list