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

Reply via email to