debian/control: Add Build-Depends for `dh-python'.
[mLib-python] / conn.pyx
index 0bb0ee7..2f5d493 100644 (file)
--- a/conn.pyx
+++ b/conn.pyx
@@ -1,37 +1,43 @@
-# -*-pyrex-*-
-#
-# $Id$
-#
-# Non-blocking connections
-#
-# (c) 2005 Straylight/Edgeware
-#
+### -*-pyrex-*-
+###
+### Non-blocking connections
+###
+### (c) 2005 Straylight/Edgeware
+###
 
-#----- Licensing notice -----------------------------------------------------
-#
-# This file is part of the Python interface to mLib.
-#
-# mLib/Python is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-# 
-# mLib/Python is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with mLib/Python; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+###----- Licensing notice -----------------------------------------------------
+###
+### This file is part of the Python interface to mLib.
+###
+### mLib/Python is free software; you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation; either version 2 of the License, or
+### (at your option) any later version.
+###
+### mLib/Python is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with mLib/Python; if not, write to the Free Software Foundation,
+### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
 cdef class SelConnect:
+  """
+  SelConnect(SK, [connectedproc = FUNC], [errorproc = FUNC])
+
+  When socket SK connects, call CONNECTEDPROC(); if connection fails, call
+  ERRORPROC(ERRNO, MESSAGE).
+
+  Attributes: C.socket, C.activep, C.connectedproc, C.errorproc.
+  """
   cdef conn c
   cdef int _activep
   cdef readonly object socket
   cdef _connected
   cdef _error
-  def __new__(me, sk, connectedproc = None, errorproc = None,
+  def __cinit__(me, sk, connectedproc = None, errorproc = None,
               *hunoz, **hukairz):
     conn_fd(&me.c, &_sel, sk.fileno(), _connfunc, <void *>me)
     me._activep = 1
@@ -42,9 +48,11 @@ cdef class SelConnect:
     if me._activep:
       conn_kill(&me.c)
   property activep:
+    """C.activep -> BOOL: is connection still in progress?"""
     def __get__(me):
       return _tobool(me._activep)
   property connectedproc:
+    """C.connectedproc -> FUNC: call FUNC() when connection completes"""
     def __get__(me):
       return me._connected
     def __set__(me, proc):
@@ -52,6 +60,9 @@ cdef class SelConnect:
     def __del__(me):
       me._connected = None
   property errorproc:
+    """
+    C.errorproc -> FUNC: call FUNC(ERRNO, MSG) if connection fails
+    """
     def __get__(me):
       return me._error
     def __set__(me, proc):
@@ -59,6 +70,7 @@ cdef class SelConnect:
     def __del__(me):
       me._error = None
   def kill(me):
+    """C.kill(): give up on connection"""
     if not me._activep:
       raise ValueError, 'already dead'
     conn_kill(&me.c);
@@ -68,13 +80,16 @@ cdef class SelConnect:
     me._activep = 0
     me.dead()
   def dead(me):
+    """C.dead(): called when connection completes or fails"""
     pass
   def connected(me):
+    """C.connected(): called when connection completes successfully"""
     return _maybecall(me._connected, ())
   def error(me, errno, strerror):
+    """C.error(ERRNO, MSG): called when connection fails"""
     return _maybecall(me._error, ())
 
-cdef void _connfunc2(int fd, void *arg):
+cdef void _connfunc(int fd, void *arg):
   cdef SelConnect c
   c = <SelConnect>arg
   c._dead()
@@ -83,9 +98,5 @@ cdef void _connfunc2(int fd, void *arg):
     c.error(errno, strerror(errno))
   else:
     c.connected()
-cdef void _connfunc(int fd, void *arg):
-  PyEval_AcquireLock()
-  _connfunc2(fd, arg)
-  PyEval_ReleaseLock()
 
-#----- That's all, folks ----------------------------------------------------
+###----- That's all, folks --------------------------------------------------