Motivation:
Creating an IOError is not "cheap" as we use String formatting to do so. In cases of EWOULDBLOCK we will never use the IOError at the end so we should not even create one.
Modifications:
Handle EWOUDLBOCK without creating and IOError
Result:
Less overhead when a syscall will fail because it would block
Motivation:
Checking for blacklisted errno values should be an assert and not a precondition as this would signal a bug in our code itself and not something bad the user was doing. Also this will make the code smaller when compiling in release mode.
Modifications:
Change the blacklist check to be an assert.
Result:
Only check for blacklisted errno when asserts are enabled.
Motivation:
We had a few external dependencies that were mainly used to include header files.
Modifications:
Add extra modules that will be used to export these headers.
Result:
Less external dependencies.
* Move all syscalls that also need to handle errno in an extra file and ensure we not get any problems with invalid errno handling
Motivation:
Because it is possible ARC cause an syscall and so set the errno value we need to ensure no ARC can ever happen before we were able to read the errno value that was caused by an syscall we made.
Modifications:
Move all syscalls to an extra file (System.swift) and ensure all exposed methods are marked with `@inline(never)` and not capture any classes. This ensures no ARC can ever happen.
Result:
Be able to safely read errno if needed.
* Comments
* Docker work
- New image based on xenial.
- Simplified workflow with docker-compose
- Update the readme with docker-compose section
- Move docker related stuff to a dedicated folder
* Add a gen-cert.sh to the container image
* Document certificate generation and how to test all sample servers