-# -*-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
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):
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):
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);
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 _connfunc(int fd, void *arg):
else:
c.connected()
-#----- That's all, folks ----------------------------------------------------
+###----- That's all, folks --------------------------------------------------