mercurial/posix.py
changeset 29530 3239e2fdd2e2
parent 27380 c7129ed280b8
child 30309 4b1af1c867fa
child 30654 5f33116cd787
--- a/mercurial/posix.py	Sat May 21 16:42:59 2016 +0900
+++ b/mercurial/posix.py	Sat May 21 16:52:04 2016 +0900
@@ -598,3 +598,18 @@
         return ''.join(chunks)
     finally:
         fcntl.fcntl(pipe, fcntl.F_SETFL, oldflags)
+
+def bindunixsocket(sock, path):
+    """Bind the UNIX domain socket to the specified path"""
+    # use relative path instead of full path at bind() if possible, since
+    # AF_UNIX path has very small length limit (107 chars) on common
+    # platforms (see sys/un.h)
+    dirname, basename = os.path.split(path)
+    bakwdfd = None
+    if dirname:
+        bakwdfd = os.open('.', os.O_DIRECTORY)
+        os.chdir(dirname)
+    sock.bind(basename)
+    if bakwdfd:
+        os.fchdir(bakwdfd)
+        os.close(bakwdfd)