diff --git a/Mac/Unsupported/mactcp/socket.py b/Mac/Unsupported/mactcp/socket.py
index e1ef0ac..c6f817d 100644
--- a/Mac/Unsupported/mactcp/socket.py
+++ b/Mac/Unsupported/mactcp/socket.py
@@ -54,6 +54,15 @@
 	return macdnr.AddrToStr(id)
 
 
+def gethostbyaddr(str):
+	id = _ipaddress(str)
+	ptr = macdnr.AddrToName(id)
+	ptr.wait()
+	name = ptr.cname
+	if name[-1:] == '.': name = name[:-1]
+	names, addresses = [], [str]
+	return name, names, addresses
+
 def gethostname():
 	global _myname
 	if _myname == None:
@@ -164,8 +173,8 @@
 		self.stream.PassiveOpen(self.port)
 		self.listening = 1
 		
-	def makefile(self, rw = 'r'):
-		return _socketfile(self, rw)
+	def makefile(self, rw = 'r', bs = 512):
+		return _socketfile(self, rw, bs)
 		
 	def recv(self, bufsize, flags=0):
 		if flags:
@@ -206,14 +215,15 @@
 
 class _socketfile:
 	
-	def __init__(self, sock, rw):
+	def __init__(self, sock, rw, bs):
 		if rw not in ('r', 'w'): raise _myerror, "mode must be 'r' or 'w'"
 		self.sock = sock
 		self.rw = rw
+		self.bs = bs
 		self.buf = ''
 		
-	def read(self, length = 0):
-		if length <= 0:
+	def read(self, length = -1):
+		if length < 0:
 			length = 0x7fffffff
 		while len(self.buf) < length:
 			new = self.sock.recv(0x7fffffff)
@@ -240,8 +250,16 @@
 			self.buf = self.buf[i+1:]
 		return rv
 		
+	def readlines(self):
+		list = []
+		line = self.readline()
+		while line:
+			list.append(line)
+			line = self.readline()
+		return list
+		
 	def write(self, buf):
-		BS = 512
+		BS = self.bs
 		if len(buf) >= BS:
 			self.flush()
 			self.sock.send(buf)
@@ -250,7 +268,11 @@
 			self.buf = buf
 		else:
 			self.buf = self.buf + buf
-		
+	
+	def writelines(self, list):
+		for line in list:
+			self.write(line)
+	
 	def flush(self):
 		if self.buf and self.rw == 'w':
 			self.sock.send(self.buf)
