home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 April / com_0405_1.iso / opensource / BTpp-0.5.4-bin.exe / $INSTDIR / BT++.exe / socket.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2003-04-19  |  7.9 KB  |  252 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.2)
  3.  
  4. from _socket import *
  5. import os
  6. import sys
  7. __all__ = [
  8.     'getfqdn']
  9. import _socket
  10. __all__.extend(os._get_exports_list(_socket))
  11. if not sys.platform.lower().startswith('win'):
  12.     if hasattr(os, 'uname') and os.uname()[0] == 'BeOS' or sys.platform == 'riscos':
  13.         _realsocketcall = _socket.socket
  14.         
  15.         def socket(family, type, proto = 0):
  16.             return _socketobject(_realsocketcall(family, type, proto))
  17.  
  18.         
  19.         try:
  20.             _realsslcall = _socket.ssl
  21.         except AttributeError:
  22.             pass
  23.  
  24.         
  25.         def ssl(sock, keyfile = None, certfile = None):
  26.             if hasattr(sock, '_sock'):
  27.                 sock = sock._sock
  28.             
  29.             return _realsslcall(sock, keyfile, certfile)
  30.  
  31.     
  32. if sys.platform.lower().startswith('win'):
  33.     errorTab = { }
  34.     errorTab[10004] = 'The operation was interrupted.'
  35.     errorTab[10009] = 'A bad file handle was passed.'
  36.     errorTab[10013] = 'Permission denied.'
  37.     errorTab[10014] = 'A fault occurred on the network??'
  38.     errorTab[10022] = 'An invalid operation was attempted.'
  39.     errorTab[10035] = 'The socket operation would block'
  40.     errorTab[10036] = 'A blocking operation is already in progress.'
  41.     errorTab[10048] = 'The network address is in use.'
  42.     errorTab[10054] = 'The connection has been reset.'
  43.     errorTab[10058] = 'The network has been shut down.'
  44.     errorTab[10060] = 'The operation timed out.'
  45.     errorTab[10061] = 'Connection refused.'
  46.     errorTab[10063] = 'The name is too long.'
  47.     errorTab[10064] = 'The host is down.'
  48.     errorTab[10065] = 'The host is unreachable.'
  49.     __all__.append('errorTab')
  50.  
  51. del os
  52. del sys
  53.  
  54. def getfqdn(name = ''):
  55.     name = name.strip()
  56.     if not name or name == '0.0.0.0':
  57.         name = gethostname()
  58.     
  59.     
  60.     try:
  61.         (hostname, aliases, ipaddrs) = gethostbyaddr(name)
  62.     except error:
  63.         pass
  64.  
  65.     aliases.insert(0, hostname)
  66.     for name in aliases:
  67.         if '.' in name:
  68.             break
  69.         
  70.     else:
  71.         name = hostname
  72.     return name
  73.  
  74. _socketmethods = ('bind', 'connect', 'connect_ex', 'fileno', 'listen', 'getpeername', 'getsockname', 'getsockopt', 'setsockopt', 'recv', 'recvfrom', 'send', 'sendall', 'sendto', 'setblocking', 'shutdown')
  75.  
  76. class _socketobject:
  77.     
  78.     class _closedsocket:
  79.         
  80.         def __getattr__(self, name):
  81.             raise error(9, 'Bad file descriptor')
  82.  
  83.  
  84.     
  85.     def __init__(self, sock):
  86.         self._sock = sock
  87.  
  88.     
  89.     def close(self):
  90.         self._sock = self.__class__._closedsocket()
  91.  
  92.     
  93.     def __del__(self):
  94.         self.close()
  95.  
  96.     
  97.     def accept(self):
  98.         (sock, addr) = self._sock.accept()
  99.         return (_socketobject(sock), addr)
  100.  
  101.     
  102.     def dup(self):
  103.         return _socketobject(self._sock)
  104.  
  105.     
  106.     def makefile(self, mode = 'r', bufsize = -1):
  107.         return _fileobject(self._sock, mode, bufsize)
  108.  
  109.     _s = 'def %s(self, *args): return self._sock.%s(*args)\n\n'
  110.     for _m in _socketmethods:
  111.         exec _s % (_m, _m)
  112.     
  113.  
  114.  
  115. class _fileobject:
  116.     
  117.     def __init__(self, sock, mode, bufsize):
  118.         self._sock = sock
  119.         self._mode = mode
  120.         if bufsize < 0:
  121.             bufsize = 512
  122.         
  123.         self._rbufsize = max(1, bufsize)
  124.         self._wbufsize = bufsize
  125.         self._wbuf = self._rbuf = ''
  126.  
  127.     
  128.     def close(self):
  129.         
  130.         try:
  131.             if self._sock:
  132.                 self.flush()
  133.         finally:
  134.             self._sock = 0
  135.  
  136.  
  137.     
  138.     def __del__(self):
  139.         self.close()
  140.  
  141.     
  142.     def flush(self):
  143.         if self._wbuf:
  144.             self._sock.sendall(self._wbuf)
  145.             self._wbuf = ''
  146.         
  147.  
  148.     
  149.     def fileno(self):
  150.         return self._sock.fileno()
  151.  
  152.     
  153.     def write(self, data):
  154.         self._wbuf = self._wbuf + data
  155.         if self._wbufsize == 1:
  156.             if '\n' in data:
  157.                 self.flush()
  158.             
  159.         elif len(self._wbuf) >= self._wbufsize:
  160.             self.flush()
  161.         
  162.  
  163.     
  164.     def writelines(self, list):
  165.         filter(self._sock.sendall, list)
  166.         self.flush()
  167.  
  168.     
  169.     def read(self, n = -1):
  170.         if n >= 0:
  171.             k = len(self._rbuf)
  172.             if n <= k:
  173.                 data = self._rbuf[:n]
  174.                 self._rbuf = self._rbuf[n:]
  175.                 return data
  176.             
  177.             n = n - k
  178.             L = [
  179.                 self._rbuf]
  180.             self._rbuf = ''
  181.             while n > 0:
  182.                 new = self._sock.recv(max(n, self._rbufsize))
  183.                 if not new:
  184.                     break
  185.                 
  186.                 k = len(new)
  187.                 if k > n:
  188.                     L.append(new[:n])
  189.                     self._rbuf = new[n:]
  190.                     break
  191.                 
  192.                 L.append(new)
  193.                 n = n - k
  194.             return ''.join(L)
  195.         
  196.         k = max(512, self._rbufsize)
  197.         L = [
  198.             self._rbuf]
  199.         self._rbuf = ''
  200.         while 1:
  201.             new = self._sock.recv(k)
  202.             if not new:
  203.                 break
  204.             
  205.             L.append(new)
  206.             k = min(k * 2, 1024 ** 2)
  207.         return ''.join(L)
  208.  
  209.     
  210.     def readline(self, limit = -1):
  211.         data = ''
  212.         i = self._rbuf.find('\n')
  213.         while i < 0 and not None if limit < limit else limit <= len(self._rbuf):
  214.             new = self._sock.recv(self._rbufsize)
  215.             if not new:
  216.                 break
  217.             
  218.             i = new.find('\n')
  219.             if i >= 0:
  220.                 i = i + len(self._rbuf)
  221.             
  222.             self._rbuf = self._rbuf + new
  223.         if i < 0:
  224.             i = len(self._rbuf)
  225.         else:
  226.             i = i + 1
  227.         if limit <= limit:
  228.             pass
  229.         elif limit < len(self._rbuf):
  230.             i = limit
  231.         
  232.         (data, self._rbuf) = (self._rbuf[:i], self._rbuf[i:])
  233.         return data
  234.  
  235.     
  236.     def readlines(self, sizehint = 0):
  237.         total = 0
  238.         list = []
  239.         while 1:
  240.             line = self.readline()
  241.             if not line:
  242.                 break
  243.             
  244.             list.append(line)
  245.             total += len(line)
  246.             if sizehint and total >= sizehint:
  247.                 break
  248.             
  249.         return list
  250.  
  251.  
  252.