-
C$?c       s      d  k  Z   y  d  k Z d  k Z Wn  e j
 o
  n X! d Z # d f  d     YZ  d f  d     YZ  d f  d     YZ 4d e f d	     YZ d  S(
   Ni   s   LiasonClassc      sV   # $ e  e  d  Z = d   Z A d   Z X e  d  Z s d   Z  d   Z RS(   Nc    s   $ % & | |  _ ' | |  _ ( d |  _ ) d |  _ , d k } / |  i o9 1 | i   \ } } 2 t
 |  d t
 |  |  _ n 5 |  i i d  8 d |  i GH; | o ; |  i |  n d S(   s0   Initialize the Liason class, greet, and announcei   s    Ns   :i    s   connected with (   s   ss   selfs   sockets   prettyaddresss	   connecteds	   outbuffers   selects   getpeernames   phosts   pports   strs   setblockings   greetings   dosend(   s   selfs   ss   prettyaddresss   greetings   phosts   pports   select(    (    s   inetcomms.pys   __init__$ s   $
 c    s   = > ? |  i i   Sd S(   s$   Return the file number of the socketN(   s   selfs   sockets   fileno(   s   self(    (    s   inetcomms.pys   fileno= s   c    s   A B E |  i o E t Sn H y? J |  i i d  } L t |  d j o L t i  n Wn- O t i j
 o Q |  i   S t Sn XV | Sd S(   s   Read data from the socketi   i    N(	   s   selfs	   connecteds   Nones   sockets   recvs   datas   lens   errors
   disconnect(   s   selfs   data(    (    s   inetcomms.pys   doreadA s     c    s   X Y \ |  i o \ d Sn _ | o a |  i | |  _ n d x d t |  i  o| f y3 h |  i i |  i t   } j |  i | |  _ Wn? l t i	 j
 o- n |  i
 d t t |  i   GHq Pn XqF Wd S(   s   Send data on the socketNs   send queue length is (   s   selfs	   connecteds   datas	   outbuffers   lens   sockets   sends	   CHUNKSIZEs   sents   errors   prettyaddresss   str(   s   selfs   datas   sent(    (    s   inetcomms.pys   dosendX s    
 "c    sN   s t w |  i o w t Sn | d |  i GH |  i i    d |  _ d S(   s   Disconnect the socket, announces   disconnected with i    N(   s   selfs	   connecteds   Nones   prettyaddresss   sockets   close(   s   self(    (    s   inetcomms.pys
   disconnects s    c    s~     |  i o  t Sn  t i |  i i   g g  g  |  \ } } }  t
 |  d j o  t Sn  |  i   Sd  S(   Ni    (   s   selfs	   connecteds   Nones   selects   sockets   filenos   waits   readables   ws   es   lens   doread(   s   selfs   waits   es   ws   readable(    (    s   inetcomms.pys   selectandread s    0 (   s   Nones   __init__s   filenos   doreads   dosends
   disconnects   selectandread(    (    (    s   inetcomms.pys   LiasonClass# s   s   HeadHunterClassc      s8    d  Z    e e d  Z  d   Z  d   Z RS(   s<   Sockets communication class that does non-blocking connect()c    s      | |  _   | |  _  | |  _  | |  _  t |  _  t |  _  d k }  |  i t j o  |  i	 |  _ n  | i
 |  i f   d S(   s?   Initialize the Representative class, spawn the connector threadN(   s   hosts   selfs   ports   prettyaddresss   callbacks   Nones   ls   errotexts   threads	   donothings   start_new_threads   connectorthread(   s   selfs   hosts   ports   prettyaddresss   callbacks   thread(    (    s   inetcomms.pys   __init__ s   c    s      d S(   s   Generic callback functionN(    (   s   selfs
   headhunter(    (    s   inetcomms.pys	   donothing s   c    s    y+  t  i |  i |  i t  i t  i  } WnA  t  i j
 o/ \ } }  d | |  _  |  i |   Sn X t }  x | D ] }  | \ } }	 } } }
  d t |  GH y  t  i  | |	 |  } Wn7  t  i	 j
 o% \ } }  d | |  _  q n X y  | i |
  WnM  t  i	 j
 o; \ } }  | i    t }  d | |  _  q n X Pq W | t j o  |  i |   Sn  t | |  i  |  _  |  i |   d  S(   Ns   GAI ERROR: s	   addrset: s   SOCKET ERROR: s   CONNECT ERROR: (   s   sockets   getaddrinfos   selfs   hosts   ports	   AF_UNSPECs   SOCK_STREAMs   addrsetlists   gaierrors   errors   texts	   errortexts   callbacks   Nones   ss   addrsets   afs   socktypes   protos	   canonnames   sas   strs   connects   closes   LiasonClasss   prettyaddresss   l(   s   selfs	   canonnames   protos   texts   afs   addrsets   ss   addrsetlists   errors   socktypes   sa(    (    s   inetcomms.pys   connectorthread s6   +	
 	  	(   s   __doc__s   Nones   __init__s	   donothings   connectorthread(    (    (    s   inetcomms.pys   HeadHunterClass s   	s   ListenClassc      s>     e  e i d  Z "d   Z &d   Z -d   Z RS(   Nc    s     g  |  _  d t |  d t |  GH t i | | | t i d t i	  }
  t }  x|
 D ]}  | \ } } } } }  d t |  GH y8  t i | | |  }  | i t i t i d  Wn-  t i j
 o }	  |	 |  _ ql n Xy$ | i |  | i d  WnC t i j
 o1 }	 | i   t } |	 |  _ ql n XPql W| t j o t i |  i  n d G| i   GH | |  _ d S(	   s   Initialize Listen classs
   resolving s   :i    s	   addrset: i   i   s   Listening onN(   s   selfs   newconnectionss   strs   hosts   ports   sockets   getaddrinfos   addressfamilys   SOCK_STREAMs
   AI_PASSIVEs   addrsetlists   Nones   ss   addrsets   afs   socktypes   protos	   canonnames   sas
   setsockopts
   SOL_SOCKETs   SO_REUSEADDRs   errors	   exceptions   binds   listens   closes   getsockname(   s   selfs   ports   hosts   addressfamilys   afs	   canonnames   protos   addrsets   ss	   exceptions   addrsetlists   socktypes   sa(    (    s   inetcomms.pys   __init__ s8    '	
 	 	c    s   "#$|  i i   Sd S(   s$   Return the file number of the socketN(   s   selfs   sockets   fileno(   s   self(    (    s   inetcomms.pys   fileno"s   c    s;   &')|  i i   \ } } +|  i i | | f  d S(   s/   Accept a new connection on the listening socketN(   s   selfs   sockets   accepts   conns   addrs   newconnectionss   append(   s   selfs   addrs   conn(    (    s   inetcomms.pys   doread&s   c    s2   -/|  i i d  1|  i i   2d GHd  S(   Ni    s   Stopped listening(   s   selfs   sockets   listens   close(   s   self(    (    s   inetcomms.pys
   disconnect-s   (   s   Nones   sockets   AF_INETs   __init__s   filenos   doreads
   disconnect(    (    (    s   inetcomms.pys   ListenClass s   As   ListenClass6c      s   4d  Z  56e d  Z RS(   s   IPv6 ListenClassc    s#   67t  i |  | | t i  d  S(   N(   s   ListenClasss   __init__s   selfs   ports   hosts   sockets   AF_INET6(   s   selfs   ports   host(    (    s   inetcomms.pys   __init__6s   (   s   __doc__s   Nones   __init__(    (    (    s   inetcomms.pys   ListenClass64s   	(	   s   sockets   selects   threads   ImportErrors	   CHUNKSIZEs   LiasonClasss   HeadHunterClasss   ListenClasss   ListenClass6(   s   LiasonClasss   ListenClasss   sockets   threads   ListenClass6s   HeadHunterClasss   selects	   CHUNKSIZE(    (    s   inetcomms.pys   ? s     	lQT