Subclassing socket

Maksim Kasimov maksim.kasimov at
Wed Dec 21 08:42:12 CET 2005

you have to agregate socket and the object must have "fileno" method,
thats gives a possibility to use instanses of your class with "" function

class mySocket:

     def __init__(self, ...):
         self.__socket = None

     def fileno(self):
         return self.__socket.fileno()

     def connect(self, __host, __port):
             self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             self.__socket.connect((__host, __port))

     def close(self):
             if self.__socket is not None:
             self.__socket = None


groups.20.thebriguy at wrote:
> socket objects have a little quirk.  If you try to receive 0 bytes on a
> blocking socket, they block.  That is, if I call recv(0), it blocks
> (until some data arrives).
> I think that's wrong, but I don't want to argue that.  I would like to
> create a subclass of socket that fixes the problem.  Ideally, something
> like:
> class new_socket(socket):
>     def recv( self, bufsize, flags=0 ):
>         if bufsize == 0:
>             return ""
>         else:
>             return socket.recv( bufsize, flags )
> They only problem is, sockets return socket objects via the accept
> call.  And the socket returned is of type socket, of course, not
> new_socket, as I would like.  I could override accept() to return a
> new_socket, but I don't know how to convert the old socket to a new
> socket.  That is, I'd like to add a method to the class above something
> like:
>     def accept( self ):
>         conn, addr = socket.accept()
>         <convert conn, which is type socket to type new_socket>
>         return ( conn, addr )
> Does anyone have any suggestions on how to do the above?

Best regards,
Maksim Kasimov
mailto: maksim.kasimov at

More information about the Python-list mailing list