diff -r 98f99d6291d4 django/conf/global_settings.py
--- a/django/conf/global_settings.py	Mon Apr 13 17:16:17 2009 +0200
+++ b/django/conf/global_settings.py	Tue Apr 14 18:44:47 2009 +0900
@@ -288,6 +288,7 @@
 # isExistingURL validator.
 from django import get_version
 URL_VALIDATOR_USER_AGENT = "Django/%s (http://www.djangoproject.com)" % get_version()
+URL_VERIFY_EXIST_SOCKET_TIMEOUT = 10
 
 # The tablespaces to use for each model when not specified otherwise.
 DEFAULT_TABLESPACE = ''
diff -r 98f99d6291d4 django/forms/fields.py
--- a/django/forms/fields.py	Mon Apr 13 17:16:17 2009 +0200
+++ b/django/forms/fields.py	Tue Apr 14 18:44:47 2009 +0900
@@ -436,9 +436,11 @@
 try:
     from django.conf import settings
     URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
+    URL_VERIFY_EXIST_SOCKET_TIMEOUT = settings.URL_VERIFY_EXIST_SOCKET_TIMEOUT
 except ImportError:
     # It's OK if Django settings aren't configured.
     URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
+    URL_VERIFY_EXIST_SOCKET_TIMEOUT = 10
 
 
 class FileField(Field):
@@ -543,6 +545,7 @@
     default_error_messages = {
         'invalid': _(u'Enter a valid URL.'),
         'invalid_link': _(u'This URL appears to be a broken link.'),
+        'invalid_timeout': _(u'This URL took to long to respond, appears to be broken.'),
     }
 
     def __init__(self, max_length=None, min_length=None, verify_exists=False,
@@ -563,7 +566,9 @@
         if value == u'':
             return value
         if self.verify_exists:
+            import socket
             import urllib2
+            import sys
             headers = {
                 "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
                 "Accept-Language": "en-us,en;q=0.5",
@@ -571,12 +576,25 @@
                 "Connection": "close",
                 "User-Agent": self.user_agent,
             }
+            if sys.version_info[:2]<(2,6):
+                def urlopen(req, timeout=None):
+                    socket_default_timeout = socket.getdefaulttimeout()
+                    socket.setdefaulttimeout(timeout)
+                    try:
+                        return urllib2.urlopen(req)
+                    finally:
+                        socket.setdefaulttimeout(socket_default_timeout)
+            else:
+                urlopen = urllib2.urlopen
+
             try:
                 req = urllib2.Request(value, None, headers)
-                u = urllib2.urlopen(req)
+                u = urlopen(req, timeout=URL_VERIFY_EXIST_SOCKET_TIMEOUT)
             except ValueError:
                 raise ValidationError(self.error_messages['invalid'])
-            except: # urllib2.URLError, httplib.InvalidURL, etc.
+            except Exception, e: # urllib2.URLError, httplib.InvalidURL, etc.
+                if e.args and isinstance(e.args[0], socket.timeout):
+                    raise ValidationError(self.error_messages['invalid_timeout'])
                 raise ValidationError(self.error_messages['invalid_link'])
         return value
 
