diff --git a/CHANGES.rst b/CHANGES.rst
index 0de427dd..ceb8a5b3 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -7,6 +7,10 @@ Changelog
 - Fix ``ZEO.server`` relying on test dependencies. See `issue 105
   <https://github.com/zopefoundation/ZEO/issues/105>`_.
 
+- Disallow passing strings as addresses to ClientStorage under Windows
+  because string addresses are used for unix-domain sockets, which
+  aren't supported on Windows. See `issue 107
+  <https://github.com/zopefoundation/ZEO/issues/107>`_.
 
 5.1.2 (2018-03-27)
 ------------------
diff --git a/src/ZEO/ClientStorage.py b/src/ZEO/ClientStorage.py
index 21225ba8..589bbfa5 100644
--- a/src/ZEO/ClientStorage.py
+++ b/src/ZEO/ClientStorage.py
@@ -41,6 +41,7 @@ import six
 
 from persistent.TimeStamp import TimeStamp
 from ZEO._compat import get_ident
+from ZEO._compat import WIN
 from ZEO.Exceptions import ClientDisconnected
 from ZEO.TransactionBuffer import TransactionBuffer
 from ZODB import POSException
@@ -191,6 +192,8 @@ class ClientStorage(ZODB.ConflictResolution.ConflictResolvingStorage):
         self.__name__ = name or str(addr) # Standard convention for storages
 
         if isinstance(addr, six.string_types):
+            if WIN:
+                raise ValueError("Unix sockets are not available on Windows")
             addr = [addr]
         elif (isinstance(addr, tuple) and len(addr) == 2 and
               isinstance(addr[0], six.string_types) and isinstance(addr[1], int)):
diff --git a/src/ZEO/_compat.py b/src/ZEO/_compat.py
index 43515190..5a0d4676 100644
--- a/src/ZEO/_compat.py
+++ b/src/ZEO/_compat.py
@@ -19,6 +19,7 @@ import platform
 PY3 = sys.version_info[0] >= 3
 PY32 = sys.version_info[:2] == (3, 2)
 PYPY = getattr(platform, 'python_implementation', lambda: None)() == 'PyPy'
+WIN = sys.platform.startswith('win')
 
 if PY3:
     from pickle import Pickler, Unpickler as _Unpickler, dump, dumps, loads

ZEO ClientStorage wait_timeout is ignored on Windows
I was writing unit tests for zodbbrowser when I noticed that under Windows the following code never times out:

```python
from ZEO.ClientStorage import ClientStorage
storage = ClientStorage('/no/such/zeo/socket', wait_timeout=0.001, strorage='1', read_only=True)
```

Instead it hangs forever (I killed the hung Jenkins job after 19 hours).

The timeout works fine on Linux.
diff --git a/src/ZEO/tests/forker.py b/src/ZEO/tests/forker.py
index b6e146a6..df0f06a4 100644
--- a/src/ZEO/tests/forker.py
+++ b/src/ZEO/tests/forker.py
@@ -29,6 +29,7 @@ import six
 import ZODB.tests.util
 import zope.testing.setupstack
 
+from ZEO._compat import WIN
 from ZEO import _forker
 
 logger = logging.getLogger('ZEO.tests.forker')
@@ -60,7 +61,7 @@ runner = _forker.runner
 stop_runner = _forker.stop_runner
 start_zeo_server = _forker.start_zeo_server
 
-if sys.platform[:3].lower() == "win":
+if WIN:
     def _quote_arg(s):
         return '"%s"' % s
 else:
diff --git a/src/ZEO/tests/testZEO.py b/src/ZEO/tests/testZEO.py
index 3296263c..824d91e6 100644
--- a/src/ZEO/tests/testZEO.py
+++ b/src/ZEO/tests/testZEO.py
@@ -20,6 +20,7 @@ from ZEO.ClientStorage import ClientStorage
 from ZEO.tests import forker, Cache, CommitLockTests, ThreadTests
 from ZEO.tests import IterationTests
 from ZEO._compat import PY3
+from ZEO._compat import WIN
 
 from ZODB.Connection import TransactionMetaData
 from ZODB.tests import StorageTestBase, BasicStorage,  \
@@ -1583,7 +1584,7 @@ if not os.environ.get('ZEO4_SERVER'):
             >>> conn.close(); s()
             """
 
-if sys.platform.startswith('win'):
+if WIN:
     del runzeo_logrotate_on_sigusr2
     del unix_domain_sockets
 

pip install -e .[test]
parse_log_pytest
requirements.txt
zope-testrunner manuel random2 mock msgpack-python pytest
3.4
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
BTrees==4.11.3
certifi==2021.5.30
cffi==1.15.1
importlib-metadata==4.8.3
iniconfig==1.1.1
manuel==1.13.0
mock==5.2.0
msgpack-python==0.5.6
packaging==21.3
persistent==4.9.3
pluggy==1.0.0
py==1.11.0
pycparser==2.21
pyparsing==3.1.4
pytest==7.0.1
random2==1.0.2
six==1.17.0
tomli==1.2.3
transaction==3.1.0
typing_extensions==4.1.1
zc.lockfile==2.0
ZConfig==3.6.1
zdaemon==4.4
-e git+https://github.com/zopefoundation/ZEO.git@23a5cf0ff2a6a35c1c3ebe3fbf6367e4e8c655a0#egg=ZEO
zipp==3.6.0
ZODB==5.8.1
zodbpickle==2.6
zope.exceptions==4.6
zope.interface==5.5.2
zope.testing==5.0.1
zope.testrunner==5.6

name: ZEO
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - btrees==4.11.3
      - cffi==1.15.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - manuel==1.13.0
      - mock==5.2.0
      - msgpack-python==0.5.6
      - packaging==21.3
      - persistent==4.9.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycparser==2.21
      - pyparsing==3.1.4
      - pytest==7.0.1
      - random2==1.0.2
      - six==1.17.0
      - tomli==1.2.3
      - transaction==3.1.0
      - typing-extensions==4.1.1
      - zc-lockfile==2.0
      - zconfig==3.6.1
      - zdaemon==4.4
      - zipp==3.6.0
      - zodb==5.8.1
      - zodbpickle==2.6
      - zope-exceptions==4.6
      - zope-interface==5.5.2
      - zope-testing==5.0.1
      - zope-testrunner==5.6
prefix: /opt/conda/envs/ZEO

src/ZEO/tests/testZEO.py::Test_convenience_functions::test_ZEO_DB_convenience_error src/ZEO/tests/testZEO.py::Test_convenience_functions::test_ZEO_DB_convenience_ok src/ZEO/tests/testZEO.py::Test_convenience_functions::test_ZEO_client_convenience src/ZEO/tests/testZEO.py::Test_convenience_functions::test_ZEO_connection_convenience_ok src/ZEO/tests/testZEO.py::Test_convenience_functions::test_ZEO_connection_convenience_value src/ZEO/tests/testZEO.py::test_server_status src/ZEO/tests/testZEO.py::test_ruok src/ZEO/tests/testZEO.py::test_runzeo_msgpack_support src/ZEO/tests/testZEO.py::MultiprocessingTests::test_work_with_multiprocessing src/ZEO/tests/testZEO.py::test_suite
src/ZEO/ClientStorage.py src/ZEO/_compat.py CHANGES.rst
src/ZEO/ClientStorage.py src/ZEO/_compat.py CHANGES.rst