diff --git a/scapy/arch/linux.py b/scapy/arch/linux.py
index 41514766da06dc6b7d42a136c6758d415d9f4a8d..76a46fb02254a8d2838c0da55146a9227757e258 100644
--- a/scapy/arch/linux.py
+++ b/scapy/arch/linux.py
@@ -333,7 +333,7 @@ class L3PacketSocket(SuperSocket):
             for i in self.iff:
                 set_promisc(self.ins, i, 0)
         SuperSocket.close(self)
-    def recv(self, x):
+    def recv(self, x=MTU):
         pkt, sa_ll = self.ins.recvfrom(x)
         if sa_ll[2] == socket.PACKET_OUTGOING:
             return None
@@ -419,7 +419,7 @@ class L2Socket(SuperSocket):
             self.LL = conf.default_l2
             warning("Unable to guess type (interface=%s protocol=%#x family=%i). Using %s" % (sa_ll[0],sa_ll[1],sa_ll[3],self.LL.name))
             
-    def recv(self, x):
+    def recv(self, x=MTU):
         pkt, sa_ll = self.ins.recvfrom(x)
         if sa_ll[2] == socket.PACKET_OUTGOING:
             return None
diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py
index d5b70d5433e4f329a615525587ba6a0d71c04816..b062c8aef5f6ec0e303a656105aa66439c32d59d 100644
--- a/scapy/arch/pcapdnet.py
+++ b/scapy/arch/pcapdnet.py
@@ -101,7 +101,7 @@ if conf.use_pcap:
             def close(self):
                 del(self.ins)
                 
-            def recv(self, x):
+            def recv(self, x=MTU):
                 ll = self.ins.datalink()
                 if ll in conf.l2types:
                     cls = conf.l2types[ll]
@@ -291,7 +291,7 @@ if conf.use_pcap and conf.use_dnet:
             if filter:
                 self.ins.setfilter(filter)
             self.outs = dnet.eth(iface)
-        def recv(self,x):
+        def recv(self,x=MTU):
             ll = self.ins.datalink()
             if ll in conf.l2types:
                 cls = conf.l2types[ll]
diff --git a/scapy/automaton.py b/scapy/automaton.py
index 62ce75238ee6bbf9fe4e472460366c35694d9b6c..66cf0cf9cffe21f7f00e60eab3fe96c95f3e0975 100644
--- a/scapy/automaton.py
+++ b/scapy/automaton.py
@@ -187,7 +187,7 @@ class _ATMT_supersocket(SuperSocket):
         if type(s) is not str:
             s = str(s)
         return self.spa.send(s)
-    def recv(self, n=None):
+    def recv(self, n=MTU):
         r = self.spa.recv(n)
         if self.proto is not None:
             r = self.proto(r)
diff --git a/scapy/data.py b/scapy/data.py
index 018b06297e8e1308dc9b5a36ba66474ff28eea72..fe4751d9363e5f0bbe6bd07f76aef48e0da162f2 100644
--- a/scapy/data.py
+++ b/scapy/data.py
@@ -44,7 +44,7 @@ IPV6_ADDR_UNSPECIFIED = 0x10000
 
 
 
-MTU = 1600
+MTU = 0x7fff # a.k.a give me all you have
 
  
 # file parsing to get some values :
diff --git a/scapy/layers/bluetooth.py b/scapy/layers/bluetooth.py
index 86b9b277a1b50e42b06cec5da0cbca787ed56764..89757a98daeb7901c65e25148bd20d8aa8c858a0 100644
--- a/scapy/layers/bluetooth.py
+++ b/scapy/layers/bluetooth.py
@@ -9,6 +9,7 @@ from scapy.config import conf
 from scapy.packet import *
 from scapy.fields import *
 from scapy.supersocket import SuperSocket
+from scapy.data import MTU
 
 
 class HCI_Hdr(Packet):
@@ -163,7 +164,7 @@ class BluetoothL2CAPSocket(SuperSocket):
         
         self.ins = self.outs = s
 
-    def recv(self, x):
+    def recv(self, x=MTU):
         return L2CAP_CmdHdr(self.ins.recv(x))
     
 
diff --git a/scapy/supersocket.py b/scapy/supersocket.py
index 10a32de951d4f2742e1736ade3e26544cc24a6ca..8afca6cf85a1d7457c7266535ac93973e081c17c 100644
--- a/scapy/supersocket.py
+++ b/scapy/supersocket.py
@@ -27,7 +27,7 @@ class SuperSocket:
         sx = str(x)
         x.sent_time = time.time()
         return self.outs.send(sx)
-    def recv(self, x):
+    def recv(self, x=MTU):
         return conf.raw_layer(self.ins.recv(x))
     def fileno(self):
         return self.ins.fileno()
@@ -55,7 +55,7 @@ class L3RawSocket(SuperSocket):
         self.outs = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
         self.outs.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1)
         self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type))
-    def recv(self, x):
+    def recv(self, x=MTU):
         return Ether(self.ins.recv(x)).payload
     def send(self, x):
         try:
diff --git a/scapy/utils.py b/scapy/utils.py
index 960dfb71f4128f2cfd8864b7425086a72366c5dd..6d43a7a97437f227b061addedca96a85d8ff58d3 100644
--- a/scapy/utils.py
+++ b/scapy/utils.py
@@ -484,7 +484,7 @@ class RawPcapReader:
         return pkt
 
 
-    def read_packet(self):
+    def read_packet(self, size=MTU):
         """return a single packet read from the file
         
         returns None when no more packets are available
@@ -493,7 +493,7 @@ class RawPcapReader:
         if len(hdr) < 16:
             return None
         sec,usec,caplen,wirelen = struct.unpack(self.endian+"IIII", hdr)
-        s = self.f.read(caplen)
+        s = self.f.read(caplen)[:MTU]
         return s,(sec,usec,wirelen) # caplen = len(s)
 
 
@@ -519,10 +519,10 @@ class RawPcapReader:
             res.append(p)
         return res
 
-    def recv(self, size):
+    def recv(self, size=MTU):
         """ Emulate a socket
         """
-        return self.read_packet()[0]
+        return self.read_packet(size)[0]
 
     def fileno(self):
         return self.f.fileno()
@@ -540,8 +540,8 @@ class PcapReader(RawPcapReader):
         except KeyError:
             warning("PcapReader: unknown LL type [%i]/[%#x]. Using Raw packets" % (self.linktype,self.linktype))
             self.LLcls = conf.raw_layer
-    def read_packet(self):
-        rp = RawPcapReader.read_packet(self)
+    def read_packet(self, size=MTU):
+        rp = RawPcapReader.read_packet(self,size)
         if rp is None:
             return None
         s,(sec,usec,wirelen) = rp
@@ -560,8 +560,8 @@ class PcapReader(RawPcapReader):
         res = RawPcapReader.read_all(self, count)
         import plist
         return plist.PacketList(res,name = os.path.basename(self.filename))
-    def recv(self, size):
-        return self.read_packet()
+    def recv(self, size=MTU):
+        return self.read_packet(size)