|
Home About Us A-Z Index Search * Contact Us Register Login Press ShopThe Open Brand -- Problem Reporting and Interpretations System |
Problem Report 2690 Details
Show help | Quick Search | Submit a Test Suite Support Request | Click here to view your privileges
This page provides all information on Problem Report 2690.
Report 2690 Actions
Problem Report Number 2690 Submitter's Classification Test Suite problem State Resolved Resolution Rejected (REJ) Problem Resolution ID REJ.X.0696 Raised 2017-08-10 07:42 Updated 2017-10-02 17:48 Published 2017-10-02 17:48 Product Standard Internationalised System Calls and Libraries Extended V3 (UNIX 03) Certification Program The Open Brand certification program Test Suite VSU version 5.3.14 Test Identification CAPI.os/sockets/send/T.send 27 Specification Base Definitions Issue 6 Location in Spec Open Group Base Specification for send(), and RFC 793 for TCP. Problem Summary The SO_SNDTIMEO test has a strong reliance on a timer-value that is
hard-coded into the test and not specified by the standard.Problem Text Thus, the server has not been completely filled up at this point.
Further, the RFC suggests that a zero-window probe timer should periodically
check whether the window has increased again. This probe-timer
will run even for windows that are just below the maximum segment size.
The RFC then recommends to send segments that are broken up in smaller
pieces
to fit the announced window-size (RFC 793, page 43):
"The segment sent to probe a zero window may also begin a break up
of transmitted data into smaller and smaller segments."
Thus, filling up the server entirely is steered by when the probe-timer
actually fires. The RFC does not give a strong recommendation as to the
frequency of this timer and is thus entirely implementation dependent. The
Open Group Base Specification imposes no additional requirements.
This means, that the "filling up the server"-part of the send.c test may end
up actually not filling up the server as intended. Only when the probe-timer
fires is the server really filled up. It thus may happen that the
SO_SNDTIMEO does not work correctly as the probe-timer may fire before the
SO_SNDTIMEO expiration. When this happens, the client will fill up the
server entirely, freeing up space in the send-buffer of the client and
allowing the blocking send()-call to complete.
We verified that the SO_SNDTIMEO test has a strong dependency on the
probe-timer by artificially increasing it to slightly above the SO_SNDTIMEO
of 5.12 seconds. In that case, the test succeeds. Alternatively, one could
set the SO_SNDTIMEO to be slightly below the probe-timer and in that case
the test succeeds as well. We also verified this using a modified version of
the test suite.
The success of the test is thus highly dependent on the implementation's
choice for the probe-timer, which (as specified by the RFC 793) is not
mandated to be of a particular value.Test Output 400|401 27 1 14:49:09|IC Start
200|401 27 14:49:09|TP Start
520|401 27 00067360 1 1|TEST: AF_INET SOCK_STREAM
520|401 27 00067360 1 2|PREP: Create test sockaddr_in: address =
17.226.254.120, port = 3933
520|401 27 00067360 2 1|PREP: Wait for server to be ready
520|401 27 00067360 2 2|PREP: Create a socket
520|401 27 00067360 2 3|PREP: Connect socket to address 17.226.254.120,
port 3933
520|401 27 00067360 2 4|PREP: See if SO_SNDTIMEO is supported
520|401 27 00067360 2 5|PREP: Set O_NONBLOCK
520|401 27 00067360 2 6|PREP: Fill up the server
520|401 27 00067360 2 7|PREP: Clear O_NONBLOCK on socket
520|401 27 00067360 2 8|PREP: Call setsockopt to set timeout value
520|401 27 00067360 2 9|TEST: Call to send times out as set
520|401 27 00067360 2 10|ERROR: Alarm expired awaiting completion
520|401 27 00067361 1 1|PREP: Server: create socket
520|401 27 00067361 1 2|PREP: Server: bind address 17.226.254.120, port
3933 to socket
520|401 27 00067361 1 3|PREP: Server: listen on socket
520|401 27 00067361 1 4|PREP: Server: notify client server is ready
520|401 27 00067361 1 5|PREP: Server: accept connection
520|401 27 00067361 1 6|INFO: Server: accepted connection from address
17.226.254.120, port
49710
520|401 27 00067361 1 7|PREP: sleep_server: wait for parent to complete test
520|401 27 00067361 1 8|ERROR: avs_wait_event: semop failed, errno = 90
(EIDRM - Identifier
removed)
520|401 27 00067361 1 9|INFO: sleep_server: parent completed test
520|401 27 00067361 1 10|INFO: Server terminated
220|401 27 2 14:49:27|UNRESOLVED
410|401 27 1 14:49:27|IC EndReview Information
Review Type TSMA Review Start Date 2017-08-10 07:42 Last Updated 2017-08-10 09:21 Completed 2017-08-10 09:21 Status Complete Review Recommendation Rejected (REJ) Review Response The submitter's analysis of this test failure does not match the test
output. He states:
"It thus may happen that the SO_SNDTIMEO does not work correctly as the
probe-timer may fire before the SO_SNDTIMEO expiration. When this
happens, the client will fill up the server entirely, freeing up space
in the send-buffer of the client and allowing the blocking send()-call
to complete."
However, if this was the case then the test would report that send() did
not time out. What it actually reports is that send() was interrupted
by an alarm signal. The alarm is set for 8 seconds, which means send()
remained blocked for approximately 3 seconds longer than the SO_SNDTIMEO
timeout of 5.12 seconds (and might have blocked indefinitely if it had
not been interrupted).
Thus, rather than the test being dependent on the implementation's
probe-timer value, it appears that there is a bug in the implementation
which manifests only when there is a particular relationship between the
SO_SNDTIMEO value and the probe-timer value.
It is recommended that this TSD request is rejected.
Review Type SA Review Start Date 2017-08-10 17:21 Last Updated 2017-08-10 09:24 Completed 2017-08-10 09:24 Status Complete Review Resolution Rejected (REJ) Review Conclusion This TSD request is rejected.
The submitter's analysis of this test failure does not match the test
output. He states:
"It thus may happen that the SO_SNDTIMEO does not work correctly as the
probe-timer may fire before the SO_SNDTIMEO expiration. When this
happens, the client will fill up the server entirely, freeing up space
in the send-buffer of the client and allowing the blocking send()-call
to complete."
However, if this was the case then the test would report that send() did
not time out. What it actually reports is that send() was interrupted
by an alarm signal. The alarm is set for 8 seconds, which means send()
remained blocked for approximately 3 seconds longer than the SO_SNDTIMEO
timeout of 5.12 seconds (and might have blocked indefinitely if it had
not been interrupted).
Thus, rather than the test being dependent on the implementation's
probe-timer value, it appears that there is a bug in the implementation
which manifests only when there is a particular relationship between the
SO_SNDTIMEO value and the probe-timer value.
Problem Reporting System Options:
- View Report 2690
- List All PRs
- Search Reports
- Email the System Administrator
- View the The Open Brand Interpretations Database User Manual
Contact the Certification Authority