Add support for AF_UNIX sockets
Windows 10 received support for AF_UNIX sockets in Insider Build 17063. This merge request adds basic support for AF_UNIX sockets to ws2_32 and wineserver.
Of particular note is the difficulty in handling sun_path
. Most of the functions that allow for translating Windows paths to Unix paths are not accessible from ws2_32. I considered the following options:
- Pass the Windows path to wineserver and do the conversion there.
- This is, as far as I can tell, not possible without major rearchitecting. wineserver does not have functions to translate Windows paths to Unix paths, for obvious reasons.
- Obtain the current working directory of the requesting process and temporarily change directories to there.
- This only handles relative paths and fails for absolute paths, UNC paths, etc.
- Conditionally change directories based on whether the path is relative or not.
- This is error-prone and wineserver does not have the requisite functions to do this cleanly.
I ultimately decided to pass the translated Unix path to wineserver, which changes directories to dirname(path)
. It then provides bind
and connect
with basename(path)
. This is not threadsafe, but wineserver is not (currently) multithreaded.
Abstract sockets are not fully supported by this patch, matching the behavior of Windows.
Edited by Ally Sommers