HomeAbout Us A-Z IndexSearch * Contact Us Register LoginPress Shop

The Open Brand -- Problem Reporting and Interpretations System


Problem Report 2690 Details

Help 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 End

    Review 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:

     

    Back   


Contact the Certification Authority