Re: [Rd] socketSelect(..., timeout): non-integer timeouts in (0, 2) (?) equal infinite timeout on Linux - weird

2017-10-05 Thread Henrik Bengtsson
Thanks Tomas.  I can confirm that this bug is gone in / it works with:

> sessionInfo()
R Under development (unstable) (2017-10-05 r73472)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.3 LTS

/Henrik


On Thu, Oct 5, 2017 at 6:13 AM, Tomas Kalibera  wrote:
> Fixed in 73470
>
> Best,
> Tomas
>
>
> On 10/05/2017 06:11 AM, Henrik Bengtsson wrote:
>>
>> I'd like to follow up/bump the attention to this bug causing the
>> timeout to fail for socketSelect() on Unix.  It is still there in R
>> 3.4.2 and R-devel.  I've identified the bug in the R source code - the
>> bug is due to floating-point precisions and comparison using >=.  See
>> PR17203 (https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17203)
>> for details and a patch.  I've just reverified that the patch still
>> solves the problem on trunk (SVN r73463).
>>
>> Thanks,
>>
>> /Henrik
>>
>> On Sat, Oct 1, 2016 at 1:11 PM, Henrik Bengtsson
>>  wrote:
>>>
>>> There's something weird going on for certain non-integer values of
>>> argument 'timeout' to base::socketSelect().  For such values, there is
>>> no timeout and you effectively end up with an infinite timeout.   I
>>> can reproduce this on R 3.3.1 on Ubuntu 16.04 and RedHat 6.6, but not
>>> on Windows (via Linux Wine).
>>>
>>> # 1. In R master session

 con <- socketConnection('localhost', port = 11001, server = TRUE,
 blocking = TRUE, open = 'a+b')
>>>
>>> # 2. In R servant session (connect to the above master socket)

 con <- socketConnection('localhost', port = 11001, server = FALSE,
 blocking = TRUE, open = 'a+b')
>>>
>>> # 3. In R master session (check if there's something available on
>>> connection)
>>> # Wait at most 0 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 0)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0   0   0
>>> [1] FALSE
>>>
>>> # Wait at most 1 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 1)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   1.002
>>> [1] FALSE
>>>
>>> # Wait at most 2 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 2)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   2.002
>>> [1] FALSE
>>>
>>> # Wait at most 2.5 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 2.5)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   2.502
>>> [1] FALSE
>>>
>>> # Wait at most 2.1 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 2.1)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   2.101
>>> [1] FALSE
>>>
>>> However, here are some weird cases where the value of the 'timeout'
>>> argument is ignored:
>>>
>>> # Wait at most 1.9 seconds

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 1.9)); print(t); print(r)
>>>
>>> ^C   user  system elapsed
>>>3.780  14.888  20.594
>>>
 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 0.1)); print(t); print(r)
>>>
>>> ^C   user  system elapsed
>>>2.596  11.208  13.907
>>> [1] FALSE
>>>
>>> Note how I had to signal a user interrupt (Ctrl-C) to exit
>>> socketSelect().  Also, not that it still works with the timeout values
>>> chosen above, e.g.
>>>
 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 0)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0   0   0
>>> [1] FALSE

 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 1)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   1.001
>>> [1] FALSE
>>>
 t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout =
 2.1)); print(t); print(r)
>>>
>>> user  system elapsed
>>>0.000   0.000   2.103
>>> [1] FALSE
>>>
>>> It's almost as if there is something special with non-integer values
>>> in (0,2).  Not saying these are the only cases, but that's what I've
>>> observed by trial and error.  Weird.  The fact that it works on
>>> Windows, may suggest it is a Unix specific.  Anyway with macOS that
>>> wanna confirm?
>>>
>>> /Henrik
>>>
>>> Session information details:
>>>
>>> # Ubuntu 16.04

 sessionInfo()
>>>
>>> R version 3.3.1 (2016-06-21)
>>> Platform: x86_64-pc-linux-gnu (64-bit)
>>> Running under: Ubuntu 16.04.1 LTS
>>>
>>> locale:
>>>   [1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C
>>>   [3] LC_TIME=en_US.UTF-8LC_COLLATE=en_US.UTF-8
>>>   [5] LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8
>>>   [7] LC_PAPER=en_US.UTF-8   LC_NAME=C
>>>   [9] LC_ADDRESS=C   LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats graphics  

Re: [Rd] socketSelect(..., timeout): non-integer timeouts in (0, 2) (?) equal infinite timeout on Linux - weird

2017-10-05 Thread Tomas Kalibera

Fixed in 73470

Best,
Tomas

On 10/05/2017 06:11 AM, Henrik Bengtsson wrote:

I'd like to follow up/bump the attention to this bug causing the
timeout to fail for socketSelect() on Unix.  It is still there in R
3.4.2 and R-devel.  I've identified the bug in the R source code - the
bug is due to floating-point precisions and comparison using >=.  See
PR17203 (https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17203)
for details and a patch.  I've just reverified that the patch still
solves the problem on trunk (SVN r73463).

Thanks,

/Henrik

On Sat, Oct 1, 2016 at 1:11 PM, Henrik Bengtsson
 wrote:

There's something weird going on for certain non-integer values of
argument 'timeout' to base::socketSelect().  For such values, there is
no timeout and you effectively end up with an infinite timeout.   I
can reproduce this on R 3.3.1 on Ubuntu 16.04 and RedHat 6.6, but not
on Windows (via Linux Wine).

# 1. In R master session

con <- socketConnection('localhost', port = 11001, server = TRUE, blocking = 
TRUE, open = 'a+b')

# 2. In R servant session (connect to the above master socket)

con <- socketConnection('localhost', port = 11001, server = FALSE, blocking = 
TRUE, open = 'a+b')

# 3. In R master session (check if there's something available on connection)
# Wait at most 0 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
print(t); print(r)

user  system elapsed
   0   0   0
[1] FALSE

# Wait at most 1 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   1.002
[1] FALSE

# Wait at most 2 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   2.002
[1] FALSE

# Wait at most 2.5 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.5)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   2.502
[1] FALSE

# Wait at most 2.1 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.1)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   2.101
[1] FALSE

However, here are some weird cases where the value of the 'timeout'
argument is ignored:

# Wait at most 1.9 seconds

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1.9)); 
print(t); print(r)

^C   user  system elapsed
   3.780  14.888  20.594


t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0.1)); 
print(t); print(r)

^C   user  system elapsed
   2.596  11.208  13.907
[1] FALSE

Note how I had to signal a user interrupt (Ctrl-C) to exit
socketSelect().  Also, not that it still works with the timeout values
chosen above, e.g.


t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
print(t); print(r)

user  system elapsed
   0   0   0
[1] FALSE

t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   1.001
[1] FALSE


t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.1)); 
print(t); print(r)

user  system elapsed
   0.000   0.000   2.103
[1] FALSE

It's almost as if there is something special with non-integer values
in (0,2).  Not saying these are the only cases, but that's what I've
observed by trial and error.  Weird.  The fact that it works on
Windows, may suggest it is a Unix specific.  Anyway with macOS that
wanna confirm?

/Henrik

Session information details:

# Ubuntu 16.04

sessionInfo()

R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

locale:
  [1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C
  [3] LC_TIME=en_US.UTF-8LC_COLLATE=en_US.UTF-8
  [5] LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8
  [7] LC_PAPER=en_US.UTF-8   LC_NAME=C
  [9] LC_ADDRESS=C   LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1

# RedHat 6.6:

sessionInfo()

R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1

# Windows via Wine on Linux

sessionInfo()

R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows XP x64 (build 2600) Service Pack 3

locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1


Re: [Rd] socketSelect(..., timeout): non-integer timeouts in (0, 2) (?) equal infinite timeout on Linux - weird

2017-10-04 Thread Henrik Bengtsson
I'd like to follow up/bump the attention to this bug causing the
timeout to fail for socketSelect() on Unix.  It is still there in R
3.4.2 and R-devel.  I've identified the bug in the R source code - the
bug is due to floating-point precisions and comparison using >=.  See
PR17203 (https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17203)
for details and a patch.  I've just reverified that the patch still
solves the problem on trunk (SVN r73463).

Thanks,

/Henrik

On Sat, Oct 1, 2016 at 1:11 PM, Henrik Bengtsson
 wrote:
> There's something weird going on for certain non-integer values of
> argument 'timeout' to base::socketSelect().  For such values, there is
> no timeout and you effectively end up with an infinite timeout.   I
> can reproduce this on R 3.3.1 on Ubuntu 16.04 and RedHat 6.6, but not
> on Windows (via Linux Wine).
>
> # 1. In R master session
>> con <- socketConnection('localhost', port = 11001, server = TRUE, blocking = 
>> TRUE, open = 'a+b')
>
> # 2. In R servant session (connect to the above master socket)
>> con <- socketConnection('localhost', port = 11001, server = FALSE, blocking 
>> = TRUE, open = 'a+b')
>
> # 3. In R master session (check if there's something available on connection)
> # Wait at most 0 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
>> print(t); print(r)
>user  system elapsed
>   0   0   0
> [1] FALSE
>
> # Wait at most 1 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
>> print(t); print(r)
>user  system elapsed
>   0.000   0.000   1.002
> [1] FALSE
>
> # Wait at most 2 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2)); 
>> print(t); print(r)
>user  system elapsed
>   0.000   0.000   2.002
> [1] FALSE
>
> # Wait at most 2.5 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 
>> 2.5)); print(t); print(r)
>user  system elapsed
>   0.000   0.000   2.502
> [1] FALSE
>
> # Wait at most 2.1 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 
>> 2.1)); print(t); print(r)
>user  system elapsed
>   0.000   0.000   2.101
> [1] FALSE
>
> However, here are some weird cases where the value of the 'timeout'
> argument is ignored:
>
> # Wait at most 1.9 seconds
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 
>> 1.9)); print(t); print(r)
> ^C   user  system elapsed
>   3.780  14.888  20.594
>
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 
>> 0.1)); print(t); print(r)
> ^C   user  system elapsed
>   2.596  11.208  13.907
> [1] FALSE
>
> Note how I had to signal a user interrupt (Ctrl-C) to exit
> socketSelect().  Also, not that it still works with the timeout values
> chosen above, e.g.
>
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
>> print(t); print(r)
>user  system elapsed
>   0   0   0
> [1] FALSE
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
>> print(t); print(r)
>user  system elapsed
>   0.000   0.000   1.001
> [1] FALSE
>
>> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 
>> 2.1)); print(t); print(r)
>user  system elapsed
>   0.000   0.000   2.103
> [1] FALSE
>
> It's almost as if there is something special with non-integer values
> in (0,2).  Not saying these are the only cases, but that's what I've
> observed by trial and error.  Weird.  The fact that it works on
> Windows, may suggest it is a Unix specific.  Anyway with macOS that
> wanna confirm?
>
> /Henrik
>
> Session information details:
>
> # Ubuntu 16.04
>> sessionInfo()
> R version 3.3.1 (2016-06-21)
> Platform: x86_64-pc-linux-gnu (64-bit)
> Running under: Ubuntu 16.04.1 LTS
>
> locale:
>  [1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C
>  [3] LC_TIME=en_US.UTF-8LC_COLLATE=en_US.UTF-8
>  [5] LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8
>  [7] LC_PAPER=en_US.UTF-8   LC_NAME=C
>  [9] LC_ADDRESS=C   LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics  grDevices utils datasets  methods   base
>
> loaded via a namespace (and not attached):
> [1] tools_3.3.1
>
> # RedHat 6.6:
>> sessionInfo()
> R version 3.3.1 (2016-06-21)
> Platform: x86_64-pc-linux-gnu (64-bit)
>
> locale:
> [1] C
>
> attached base packages:
> [1] stats graphics  grDevices utils datasets  methods   base
>
> loaded via a namespace (and not attached):
> [1] tools_3.3.1
>
> # Windows via Wine on Linux
>> sessionInfo()
> R version 3.3.1 (2016-06-21)
> Platform: x86_64-w64-mingw32/x64 (64-bit)
> Running under: Windows XP x64 (build 2600) Service Pack 3
>
> locale:
> [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
> [3] LC_MONETARY=C LC_NUMERIC=C
> [5] LC_TIME=C
>
> attached base packages:
> 

[Rd] socketSelect(..., timeout): non-integer timeouts in (0, 2) (?) equal infinite timeout on Linux - weird

2016-10-01 Thread Henrik Bengtsson
There's something weird going on for certain non-integer values of
argument 'timeout' to base::socketSelect().  For such values, there is
no timeout and you effectively end up with an infinite timeout.   I
can reproduce this on R 3.3.1 on Ubuntu 16.04 and RedHat 6.6, but not
on Windows (via Linux Wine).

# 1. In R master session
> con <- socketConnection('localhost', port = 11001, server = TRUE, blocking = 
> TRUE, open = 'a+b')

# 2. In R servant session (connect to the above master socket)
> con <- socketConnection('localhost', port = 11001, server = FALSE, blocking = 
> TRUE, open = 'a+b')

# 3. In R master session (check if there's something available on connection)
# Wait at most 0 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
> print(t); print(r)
   user  system elapsed
  0   0   0
[1] FALSE

# Wait at most 1 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   1.002
[1] FALSE

# Wait at most 2 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   2.002
[1] FALSE

# Wait at most 2.5 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.5)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   2.502
[1] FALSE

# Wait at most 2.1 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.1)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   2.101
[1] FALSE

However, here are some weird cases where the value of the 'timeout'
argument is ignored:

# Wait at most 1.9 seconds
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1.9)); 
> print(t); print(r)
^C   user  system elapsed
  3.780  14.888  20.594

> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0.1)); 
> print(t); print(r)
^C   user  system elapsed
  2.596  11.208  13.907
[1] FALSE

Note how I had to signal a user interrupt (Ctrl-C) to exit
socketSelect().  Also, not that it still works with the timeout values
chosen above, e.g.

> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 0)); 
> print(t); print(r)
   user  system elapsed
  0   0   0
[1] FALSE
> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 1)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   1.001
[1] FALSE

> t <- system.time(r <- socketSelect(list(con), write = FALSE, timeout = 2.1)); 
> print(t); print(r)
   user  system elapsed
  0.000   0.000   2.103
[1] FALSE

It's almost as if there is something special with non-integer values
in (0,2).  Not saying these are the only cases, but that's what I've
observed by trial and error.  Weird.  The fact that it works on
Windows, may suggest it is a Unix specific.  Anyway with macOS that
wanna confirm?

/Henrik

Session information details:

# Ubuntu 16.04
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

locale:
 [1] LC_CTYPE=en_US.UTF-8   LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8   LC_NAME=C
 [9] LC_ADDRESS=C   LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1

# RedHat 6.6:
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1

# Windows via Wine on Linux
> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows XP x64 (build 2600) Service Pack 3

locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=C LC_NUMERIC=C
[5] LC_TIME=C

attached base packages:
[1] stats graphics  grDevices utils datasets  methods   base

loaded via a namespace (and not attached):
[1] tools_3.3.1

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel