Problems with native Unix domain sockets on Win 10/2019

Ken Brown kbrown@cornell.edu
Thu Sep 24 11:26:01 GMT 2020


On 9/23/2020 7:25 AM, Michael McMahon via Cygwin wrote:
> Hi,
> 
> I searched for related issues but haven't found anything.
> 
> I am having some trouble with Windows native Unix domain sockets
> (a recent feature in Windows 10 and 2019 server) and Cygwin.
> I think I possibly know the cause since I had to investigate a similar
> looking issue on another platform built on Windows.
> 
> The problem is that cygwin commands don't seem to recognise native Unix
> domain sockets correctly. For example, the socket "foo.sock" should
> have the same ownership and similar permissions to other files
> in the example below:
> 
> $ ls -lrt
> total 2181303
> 
> -rw-r--r--  1 mimcmah      None             1259   Sep 23 10:22 test.c
> -rwxr-xr-x  1 mimcmah      None             3680   Sep 23 10:22 test.obj
> -rwxr-xr-x  1 mimcmah      None             121344 Sep 23 10:22 test.exe
> -rw-r-----  1 Unknown+User Unknown+Group         0 Sep 23 10:23 foo.sock
> -rw-r--r--  1 mimcmah      None             144356 Sep 23 10:27 check.ot
> 
> A bigger problem is that foo.sock can't be deleted with the cygwin "rm"
> command.
> 
> $ rm -f foo.sock
> rm: cannot remove 'foo.sock': Permission denied
> 
> $ chmod 777 foo.sock
> chmod: changing permissions of 'foo.sock': Permission denied
> 
> $ cmd /c del foo.sock
> 
> But, native Windows commands are okay, as the third example shows.
> 
> I think the problem may relate to the way native Unix domain sockets are
> implemented in Windows and the resulting special handling required.
> They are implemented as NTFS reparse points and when opening them
> with CreateFile, you need to specify the FILE_FLAG_OPEN_REPARSE_POINT
> flag. Otherwise, you get an ERROR_CANT_ACCESS_FILE. There are other
> complications unfortunately, which I'd be happy to discuss further.
> 
> But, to reproduce it, you can compile the attached code snippet
> which creates foo.sock in the current directory. Obviously, this
> only works on recent versions of Windows 10 and 2019 server.

Cygwin doesn't currently support native Windows AF_UNIX sockets, as you've 
discovered.  See

   https://cygwin.com/pipermail/cygwin/2020-June/245088.html

for the current state of AF_UNIX sockets on Cygwin, including the possibility of 
using native Windows AF_UNIX sockets on systems that support them.

If all you want is for Cygwin to recognize such sockets and allow you to apply 
rm, chmod, etc., I don't think it would be hard to add that capability.  But I 
doubt if that's all you want.

Further discussion of this will have to wait until Corinna is available.

Ken


More information about the Cygwin mailing list