[lldb-dev] Getting ConnectionFileDescriptor working on Windows

Todd Fiala tfiala at google.com
Thu Oct 2 10:42:18 PDT 2014


The concept all sounds good to me.

I suppose as long as the constructors/factories that create these make it
hard for the non-Windows platforms to accidentally introduce shared code
that really uses the wrong constructor (which at the file-descriptor level
might be entirely not obvious and hidden on non-Windows), then that would
be good.  Otherwise I could see you having run-time breaks that only show
up on Windows but merrily work on other platforms.

On Thu, Oct 2, 2014 at 10:39 AM, Zachary Turner <zturner at google.com> wrote:

> That's correct.  ConnectionTcpListen in particular will probably have a
> different impl on posix, because that one use case is the only reason for
> the GetBoundPort() method.  So removing all of the bound port logic from
> the interface and implementation of the other types of connections seems
> desirable.
>
> On Thu, Oct 2, 2014 at 10:37 AM, Todd Fiala <tfiala at google.com> wrote:
>
>> > Unless you're using a connection string, the instantion site would
>> just instantiate the exact thing it wants.  e.g.
>> > ConnectionTcpListen *listener = new ConnectionTcpListen();
>>
>> Ok - so these classes will exist across all OS builds, where on Windows
>> you get impls that have different details for each derived class, and on
>> POSIXy items the derived classes are either derive with no impl different
>> from base class, or typedefs (?) that map to the single base class, and
>> everything just works.  Is that about right?
>>
>> I'm just looking at it from the angle of shared code using those new
>> classes when they're not using the connection string approach.
>>
>> Sounds reasonable to me.
>>
>>
>> On Thu, Oct 2, 2014 at 10:34 AM, Zachary Turner <zturner at google.com>
>> wrote:
>>
>>> Unless you're using a connection string, the instantion site would just
>>> instantiate the exact thing it wants.  e.g.
>>>
>>> ConnectionTcpListen *listener = new ConnectionTcpListen();
>>> listener->Connect();
>>> listener->GetBoundPort();
>>>
>>> something like that.
>>>
>>> For the connection string case, you would call a factory method that
>>> returns a Connection *
>>>
>>> On Thu, Oct 2, 2014 at 10:29 AM, Todd Fiala <tfiala at google.com> wrote:
>>>
>>>> Hey Zachary,
>>>>
>>>> >> On posix in cases where it's user specified or don't know, it seems
>>>> we could just create a FileConnection and that would be equivalent to the
>>>> current behavior, since it seems to treat everything the same anyway.
>>>>
>>>> What would the instantiation sites for these classes look like?  Would
>>>> it be a call into some kind of Host level "'Create{Socket,File,Pipe}(...)"
>>>> factory method that knows what kind of underlying object to create based on
>>>> that?  In which case you can fork off to the right versions for Windows,
>>>> while POSIX-y systems would (as you noted) be able to use a single
>>>> file-descriptor-based impl?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Thu, Oct 2, 2014 at 10:04 AM, Zachary Turner <zturner at google.com>
>>>> wrote:
>>>>
>>>>> On Wed, Oct 1, 2014 at 1:44 PM, Zachary Turner <zturner at google.com>
>>>>> wrote:
>>>>>
>>>>>>
>>>>>> I was thinking about splitting CFD into multiple classes, one for
>>>>>> each type of descriptor.  A FileConnection, PipeConnection,
>>>>>> TcpSocketConnection, ListeningConnection, etc.  Then, the caller would have
>>>>>> to instantiate the right kind.  This has its own set of problems, but at
>>>>>> least seems to solve the problem of requiring the creator of the CFD to
>>>>>> specify what they're actually giving us.  On posix in cases where it's user
>>>>>> specified or don't know, it seems we could just create a FileConnection and
>>>>>> that would be equivalent to the current behavior, since it seems to treat
>>>>>> everything the same anyway.
>>>>>>
>>>>>
>>>>> The more I think about this, the more I feel like it's the right
>>>>> approach (it might even be the only approach that even works, I can't
>>>>> really come up with anything else that solves the problem, much less does
>>>>> it nicely).  We've already got cases where people create a
>>>>> ConnectionFileDescriptor of a specific type, and use it in a way that would
>>>>> break if it weren't of that type.  Separating out the cases into different
>>>>> classes this way would allow these cases to be cleaner, as many methods
>>>>> that are publicly exposed on CFD, and some of the class members as well are
>>>>> specific to the type of fd being wrapped.  So the interfaces of the other
>>>>> types could become cleaner as well.
>>>>>
>>>>> _______________________________________________
>>>>> lldb-dev mailing list
>>>>> lldb-dev at cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Todd Fiala | Software Engineer | tfiala at google.com
>>>>
>>>>
>>>
>>
>>
>> --
>> Todd Fiala | Software Engineer | tfiala at google.com
>>
>>
>


-- 
Todd Fiala | Software Engineer | tfiala at google.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20141002/f67f03db/attachment.html>


More information about the lldb-dev mailing list