Casey Marshall wrote:
> On reflection, it actually seems like a better idea to 
> augment VMChannel
> for this purpose (and refactor VMPlainSocketImpl) instead. Right now
> VMChannel takes a Channel object, and extracts the native file
> descriptor integer, and uses it internally. Instead, each 
> Channel object
> could just create a VMChannel instance, delegate its method 
> calls to it,
> and in our RI we'll use native FD integers under the hood.
> 
> Some of the methods I was adding to VMChannel almost support this,
> anyway, like this:
> 
> >   public int accept() throws IOException
> >   {
> >     return accept(nfd.getNativeFD());
> >   }
> >   
> >   public static native int accept(int native_fd) throws IOException;
> 
> We could instead make accept() return a new VMChannel, make the native
> method private, and in our reference implementation, use an integer
> native file descriptor. Most of the methods in VMChannel 
> support this at
> least partially -- there is a plain call that doesn't use any 
> descriptor
> integer, and a call that takes a FD int as an argument, and the former
> passes a private integer instance variable to the latter. 
> We'd just need to make the FD ones private in the RI.
> 
> Then we can add a getNativeFD() call to VMChannel, that platform
> specific code, like the kqueue Selector, can call. VMs that don't use
> integers as file descriptors can then throw
> UnsupportedOperationException for that method.
> 
> Does this sound like it will work?

I think so.

> I don't know if we usually define VM
> classes as classes to be instantiated, instead of being all static
> methods, but I can't think of any drawback of doing that.

I have done that in at least one other instance (VMThread) and I think
it works well.

Regards,
Jeroen

Reply via email to