3 ms·
Was it because epoll vs iocp differences?
by eps 14y ago
Was it because epoll vs iocp differences?
- udp 14y agoNow that's one area where Windows really differs. You can't write a high performance server for Windows without using IOCP, which couldn't be more different from what every other platform has for that kind of thing (epoll, kqueue, /dev/poll, ...) It was interesting watching node/libuv face all the same problems I did when originally trying to abstract over this.
- pjmlp 14y agoSolaris?
- udp 14y agoInteresting - I wasn't aware that any other platform implemented IOCP. I wonder how that performs vs. traditional I/O with /dev/poll?
- pjmlp 14y agoYou can get information about it here http://web.archive.org/web/20110719052845/http://developers.sun.com/solaris/articles/event_completion.html http://web.archive.org/web/20110719052845/http://developers....
- eps 14y agoIt is possible to wrap iocp api into a bsd-style socket interface compatible with epoll semantics. It ain't pretty, the socket int becomes an index into an internal map of per-socket support structs, there are ungodly edge cases and what not, but it's doable nonetheless.
- rumcajz 14y agoepoll/iocp is the most visible difference, however, the amount of time spent porting is more due to subtle differences in every POSIX-like function. File discriptor is int? Nope, it's SOCKET. -1 means it is invalid? Nope. Use INVALID_SOCKET instead. error codes are stored in errno? No. Use WSAGetLastError() to retrieve the error. Still, EAGAIN should be EAGAIN, even on Windows? No. Use WSAEAGAIN instead. And so on and on.