Index: twisted/topfiles/4386.bugfix
===================================================================
--- twisted/topfiles/4386.bugfix	(revision 0)
+++ twisted/topfiles/4386.bugfix	(revision 0)
@@ -0,0 +1 @@
+twisted.internet.abstract.FileDescriptor now implements twisted.internet.interfaces.IPushProducer instead of twisted.internet.interfaces.IProducer.
Index: twisted/internet/abstract.py
===================================================================
--- twisted/internet/abstract.py	(revision 33568)
+++ twisted/internet/abstract.py	(working copy)
@@ -155,7 +155,7 @@
 
     SEND_LIMIT = 128*1024
 
-    implements(interfaces.IProducer, interfaces.IReadWriteDescriptor,
+    implements(interfaces.IPushProducer, interfaces.IReadWriteDescriptor,
                interfaces.IConsumer, interfaces.ITransport, interfaces.IHalfCloseableDescriptor)
 
     def __init__(self, reactor=None):
Index: twisted/internet/test/test_filedescriptor.py
===================================================================
--- twisted/internet/test/test_filedescriptor.py	(revision 33568)
+++ twisted/internet/test/test_filedescriptor.py	(working copy)
@@ -5,11 +5,26 @@
 Whitebox tests for L{twisted.internet.abstract.FileDescriptor}.
 """
 
+from zope.interface.verify import verifyObject
+
 from twisted.internet.abstract import FileDescriptor
+from twisted.internet.interfaces import IPushProducer
 from twisted.trial.unittest import TestCase
 
 
 
+class FileDescriptorImplementsIPushProducerTests(TestCase):
+    """
+    Test to check that L{FileDescriptor} implements L{IPushProducer}.
+    """
+    def test_fileDescriptorImplementsIPushProducer(self):
+        """
+        L{Filedescriptor} should implement L{IPushProducer}.
+        """
+        fileDescriptor = FileDescriptor()
+        self.assertTrue(verifyObject(IPushProducer, fileDescriptor))
+
+
 class FileDescriptorWriteSequenceTests(TestCase):
     """
     Tests for L{FileDescriptor.writeSequence}.
