diff --git a/servefile b/servefile index 79e87ce..044311e 100755 --- a/servefile +++ b/servefile @@ -849,9 +849,9 @@ class ServeFile(): # filter out ips we are not listening on if not self.listenIPv6: - ips = filter(lambda ip: ":" not in ip, ips) + ips = [ip for ip in ips if '.' in ip] if not self.listenIPv4: - ips = filter(lambda ip: "." not in ip, ips) + ips = [ip for ip in ips if ':' in ip] return ips return None diff --git a/tests/test_servefile.py b/tests/test_servefile.py index 66acc23..4eb2976 100644 --- a/tests/test_servefile.py +++ b/tests/test_servefile.py @@ -2,6 +2,7 @@ import io import os import pytest import requests +import socket import subprocess import tarfile import time @@ -9,6 +10,12 @@ import urllib3 # crudly written to learn more about pytest and to have a base for refactoring +try: + ConnectionRefusedError + connrefused_exc = ConnectionRefusedError +except NameError: + connrefused_exc = socket.error + @pytest.fixture def run_servefile(): @@ -118,6 +125,18 @@ def test_specify_port(run_servefile, datadir): check_download(data, fname='testfile', port=8081) +def test_ipv4_only(run_servefile, datadir): + data = "NOOT NOOT" + p = datadir({'testfile': data}) / 'testfile' + run_servefile([str(p), '-4']) + + check_download(data, fname='testfile', host='127.0.0.1') + + sock = socket.socket(socket.AF_INET6) + with pytest.raises(connrefused_exc): + sock.connect(("::1", 8080)) + + def test_big_download(run_servefile, datadir): # test with about 10 mb of data data = "x" * (10 * 1024 ** 2)