e50d3b98a3
Basic support for Unix domain sockets on Windows within the limitations of the operating system itself: no support for abstract addresses, datagram or packet sockets and ancillary data. This also fixes File::GetType on Windows to correctly identify reparse points representing AF_UNIX sockets as such, rather then identify them as links. Finally, it is worth noting that there is an existing discrepancy between POSIX OSes and Windows: on POSIX OSes File(sockPath).existsSync() returns true, but on Windows the same code returns false because Unix domain sockets are not considered regular files by stat. This CL does a bunch of refactoring around RawAddr class which surves as a wrapper around various structures in sockaddr_* family. Distinguishing anonymous AF_UNIX address from abstract AF_UNIX address requires passing around the length of the address structure. Thus we incorporate this information into RawAddr. This will also make possible to properly support full-range of abstract AF_UNIX addresses in the future because supporting these requires properly handling embedded NUL bytes. (See https://github.com/dart-lang/sdk/issues/46158). Fixes https://github.com/dart-lang/sdk/issues/41161 TEST=standalone/io/unix_socket Cq-Include-Trybots: luci.dart.try:vm-fuchsia-release-x64-try Change-Id: I016cb33ebdd62f0cac1ae97d822105366a6a6964 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/457720 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Slava Egorov <vegorov@google.com>