[Python-Dev] Exposing socket and poll objects in the Concrete Object Layer

Michel Pelletier michel at dialnetwork.com
Wed Aug 13 10:02:16 EDT 2003


I'm sketching a C module for a client using new style classes.  I'd like to 
use, and return to the user in some cases, Python socket and poll objects.  I 
want to create socket objects for custom connection handlers and poll objects 
to poll a set of handlers periodically; all written in C and intended to be 
subclassed in Python to customize behavior.  Unfortunately these objects 
cannot be created, as far as I can tell, in C without resorting to PyImport_* 
and PyObject_Call* hacks which are alarmingly ugly.

I could of course just use the standard socket and select C libraries, but 
this means re-implementing all the hacks that make the Python implementations 
so rock solid across platforms, and it also means I can't return socket and 
poll objects so that *Python* subclasses of my code, and other Python code, 
can use those objects directly.

It seems to me that socket and poll objects can be easily exposed to C 
programmers through the Concrete Object Layer API.  There may be a good 
reason why this isn't so that I don't see.  Does it makes sense to expose 
methods like PySocket_New, PySocket_Bind etc. and PyPoll_New, PyPoll_Poll, 
PyPoll_Register etc?

One reason I can see is that these modules cannot be guaranteed to work 
consistently (if at all) across all platforms.  In this case it is acceptable 
to my client to detect that condition and explicitly fail.  We do not ever 
anticipate using platforms upon which these services are broken.

Does this sound useful to anyone else?  Now that new style classes make it 
possible for people to write classes in C, I think it will become a much more 
common practice, and that Python programmers moving "down" to C will expect 
to be able to use services in C that they take for granted in Python.

-Michel



More information about the Python-Dev mailing list