VMIN/VTIME and read expectations
Joel Sherrill
joel.sherrill@oarcorp.com
Tue Dec 22 10:47:00 GMT 2009
On 12/17/2009 06:05 PM, Eric Norum wrote:
> ???
> How did you make the TERMIOS stuff work on a socket?
> I use SO_SNDTIMEOand SO_RCVTIMEO options for sockets on RTEMS. This causes read to return -1 with errno=EWOULDBLOCK on timeout.
I think this is the root of the problem. The code behaves differently
on the
head from the last release branch. I need to see what has changed.
>
> We should probably take this correspondence off the newlib
>
Yep. Sorry folks. Moving...
--joel
> On Dec 17, 2009, at 3:27 PM, Joel Sherrill wrote:
>
>
>> On 12/17/2009 04:30 PM, Eric Norum wrote:
>>
>>> When you're using VMIN=0, VTIME=255 you have ICANON=0 so 'end-of-file' doesn't really exist.
>>>
>>>
>> I was kind of guessing that. Unfortunately this is in the RTEMS login code.
>> I can make it work OK for serial ports but when attached to a socket, I
>> have no idea how to detect when the socket is dropped.
>>
>> I switched to calling read() and as documented, it always returns 0
>> when there is no data. When the connection is dropped, it returns 0
>> VERY quickly. Do you think this part is a bug in the read on a socket?
>>
>> If this turns into an RTEMS specific issue, we need to switch lists.
>> But I would really like to know what is correct. :)
>>
>> --joel
>>
>>> On Dec 17, 2009, at 2:16 PM, Joel Sherrill wrote:
>>>
>>>
>>>
>>>> Hi,
>>>>
>>>> I have been looking into a program on RTEMS that
>>>> uses VMIN=0, VTIME=255. The program calls
>>>> fgetc() which calls read().
>>>>
>>>> fp->_flags == 0x2806 before the fgetc() call.
>>>> read() times out and returns 0.
>>>> fgetc() returns -1 and fp->_flags == 0x2826
>>>>
>>>>
>>>> The 0x0020 being set is _SEOF.
>>>>
>>>> My questions are:
>>>>
>>>> + Is this correct behaviour?
>>>>
>>>> + How does the application programmer distinguish
>>>> between a real EOF and an unsatisfied read? Even the
>>>> Fedora read(2) man page says:
>>>>
>>>> On success, the number of bytes read is returned (zero indicates end of
>>>> file), and the file position is advanced by this number.
>>>>
>>>> So even if I dropped down to read(2), I still don't know
>>>> how to distinguish EOF from a read timeout.
>>>>
>>>> Thanks.
>>>>
>>>> --
>>>> Joel Sherrill, Ph.D. Director of Research& Development
>>>> joel.sherrill@OARcorp.com On-Line Applications Research
>>>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>>>> Support Available (256) 722-9985
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>> --
>> Joel Sherrill, Ph.D. Director of Research& Development
>> joel.sherrill@OARcorp.com On-Line Applications Research
>> Ask me about RTEMS: a free RTOS Huntsville AL 35805
>> Support Available (256) 722-9985
>>
>>
>>
>
More information about the Newlib
mailing list