Jay Loden wrote:
> Roy Smith wrote:
>> In article <[EMAIL PROTECTED]>,
>>  billiejoex <[EMAIL PROTECTED]> wrote:
>>
>>> Hi there.
>>> I'm setting up test suite for a project of mine.
>>> >From test suite, acting as a client, I'd like to know, in certain
>>> situations, if the socket is closed on the other end or not.
>>> I noticed that I can "detect" such state if a call to socket.read()
>>> returns 0 but it seems a little poor to me. :-\
>>> Is there a reliable way to test such socket 'state'?
>> This isn't really a Python question, it's a Berkeley Socket API question.  
>> You don't say, but I assume you're talking about a TCP (i.e. SOCKSTREAM) 
>> connection?
>>
>> The answer is you can use the select() system call to detect "exceptional 
>> conditions" on a socket.  Python's select module provides this 
>> functionality, but to understand how to use it, you need to study the 
>> underlying API.
> 
> Thanks for the interesting information and suggestion of using select(). You 
> are correct that this is actually mostly a socket API question but pertains 
> to Python since the code is all Python's socket and asyncore modules. It 
> might help to step back and explain the original problem. The goal of this 
> portion of the test suite we are writing for the project is to determine if a 
> remote server is behaving properly by closing a socket from the server side 
> based on a client-side command.
> 
> Really what's needed is a way to make sure the socket gets closed, and 
> preferably determine if it was closed from the remote end as expected. Do you 
> know if this is possible to determine from the client side 
> reliably/accurately? Would select()'s exceptional condition flag actually 
> indicate whether or not the root cause of the condition was a socket closed 
> by the remote peer? I've read through the select's manpage and I can't seem 
> to find a reference that indicates what the possible values are for the I/O 
> descriptor sets returned by select. Is there another man page, or a place in 
> the header file for select I can look?

Use select to determine if the socket is readable and writable.  If it 
is, yet you can't send or receive to/from it, then it is closed.

  - Josiah
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to