Report 1307 Actions
Problem Report Number |
1307 |
Submitter's Classification |
Test Suite problem |
State |
Resolved |
Resolution |
Test Suite Deficiency (TSD) |
Problem Resolution ID |
TSD.X.0589 |
Raised |
1970-01-01 08:00 |
Updated |
2003-03-13 08:00 |
Published |
1998-05-28 08:00 |
Product Standard |
Sockets V2 (UNIX 98) |
Certification Program |
The Open Brand certification program |
Test Suite |
VSU version 5.0.2 |
Test Identification |
CAPIsockets/send 27 |
Problem Summary |
TSD4U.00229 Tests should not attempt to fill DGRAM sockets unless flow control is provided for them. |
Problem Text |
Test cases and numbers: send 27, sendmsg 46, sendto 44 The ERROR cases above correspond to execution of the tests on SOCK_DGRAM type sockets. The test sets O_NONBLOCK on the socket and attempts to fill up the socket send buffer. It then expects to receive an EWOULDBLOCK error on a subsequent send. Quote from XNS Issue 5 - Page 160. "If space is not available at the sending socket to hold the message to be transmitted and the socket file descriptor does not have O_NONBLOCK set, send() blocks until space is available. If space is not available at the sending socket to hold the message to be transmitted and the socket file descriptor does have O_NONBLOCK set, send() will fail." It is implementation dependent whether the condition "space is not available", is ever achieved on SOCK_DGRAM type sockets. The implementation can discard data before it runs out of space on such socket endpoints, as it is permitted to do so on an implementation of an unreliable message transfer. Unreliable message transfer is the specified behaviour for SOCK_DGRAM sockets, as specified by XNS Issue 5 Quote from XNS Issue 5 - Page 172 "SOCK_DGRAM Provides datagrams, which are connectionless-mode, unreliable messages of fixed maximum length." In the case of SOCK_DGRAM type sockets of AF_INET address family, the underlying protocol viz. UDP, does not support flow control. In our implementation, all the data is sent, but is discarded at the receiving end, if the receiver is overwhelmed with data. In the case of SOCK_DGRAM type sockets of AF_UNIX address family, the protocols are not as well defined and documented as UDP of AF_INET address family. It is implementation defined whether flow control is implemented or whether data is discarded. The tests may or may not succeed on SOCK_DGRAM type sockets of AF_UNIX address family, depending on implementation specific behaviour. Hence the test cannot assume the precondition that it can fill up the socket send buffer on SOCK_DGRAM type sockets. Note: The ERROR results shown by the test output are for the case of SOCK_DGRAM type sockets of AF_INET address family only. The results for the case of SOCK_DGRAM type sockets of AF_UNIX address family are not available since the test does not continue execution beyond the first failure.
|
Test Output |
TEST CASE: send TEST PURPOSE #27 If the implementation supports a communications domain and a socket type and allows the option to be set: The SO_SNDTIMEO option shall define the amount of time to block because flow control prevents data from being sent for a call to ssize_t send(int socket, const void *buffer, size_t length, int flags). TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 2293 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 2293 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 129.146.85.169, port 39978 PREP: sleep_server: wait for parent to complete test INFO: Server received signal 15 INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 2293 PREP: Set O_NONBLOCK PREP: Fill up the server PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_INET SOCK_STREAM socket type/default protocol TEST: AF_UNIX SOCK_STREAM PREP: Create test sockaddr_un: path = ../tmp/unix.0cPIcf PREP: Server: create socket PREP: Server: bind address ../tmp/unix.0cPIcf to socket PREP: Server: listen on socket PREP: Server: notify client ready to accept PREP: Server: accept connection INFO: Server: accepted connection from address ../tmp/uclient.mek_p_ PREP: sleep_server: wait for parent to complete test INFO: Server received signal 15 INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Bind address ../tmp/uclient.mek_p_ to socket PREP: Connect to address ../tmp/unix.0cPIcf PREP: Set O_NONBLOCK PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_UNIX SOCK_STREAM socket type/default protocol TEST: AF_INET SOCK_DGRAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 2294 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 2294 to socket PREP: Server: notify client server is ready PREP: Server: wait for parent to complete test INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 2294 PREP: Set O_NONBLOCK PREP: Fill up the server ERROR: Socket did not fill after 2000 messages CLEANUP: Have server flush data ERROR: Timed out waiting for completion. 27 UNRESOLVED TEST CASE: sendmsg TEST PURPOSE #46 If the implementation supports a communications domain and a socket type and allows the option to be set: The SO_SNDTIMEO option shall define the amount of time to block because flow control prevents data from being sent for a call to ssize_t sendmsg(int socket, const struct msghdr *message, int flags). TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 2921 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 2921 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 129.146.85.169, port 39989 PREP: sleep_server: wait for parent to complete test INFO: Server received signal 15 INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 2921 PREP: Set O_NONBLOCK PREP: Fill up the server PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_INET SOCK_STREAM socket type/default protocol TEST: AF_UNIX SOCK_STREAM PREP: Create test sockaddr_un: path = ../tmp/unix.0C_w9N PREP: Server: create socket PREP: Server: bind address ../tmp/unix.0C_w9N to socket PREP: Server: listen on socket PREP: Server: notify client ready to accept PREP: Server: accept connection INFO: Server: accepted connection from address ../tmp/uclient.L7BEd_ PREP: sleep_server: wait for parent to complete test INFO: Server received signal 15 INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Bind address ../tmp/uclient.L7BEd_ to socket PREP: Connect to address ../tmp/unix.0C_w9N PREP: Set O_NONBLOCK PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_UNIX SOCK_STREAM socket type/default protocol TEST: AF_INET SOCK_DGRAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 2922 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 2922 to socket PREP: Server: notify client server is ready PREP: Server: wait for parent to complete test INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 2922 PREP: Set O_NONBLOCK PREP: Fill up the server ERROR: Socket did not fill after 2000 messages CLEANUP: Have server flush data ERROR: Timed out waiting for completion. 46 UNRESOLVED TEST CASE: sendto TEST PURPOSE #44 If the implementation supports a communications domain and a socket type and allows the option to be set: The SO_SNDTIMEO option shall define the amount of time to block because flow control prevents data from being sent for a call to ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, size_t dest_len). TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 4049 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 4049 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 129.146.85.169, port 40002 PREP: sleep_server: wait for parent to complete test INFO: sleep_server: parent completed test CLEANUP: sleep_server: flush data INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 4049 PREP: Set O_NONBLOCK PREP: Fill up the server PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_INET SOCK_STREAM socket type/default protocol TEST: AF_UNIX SOCK_STREAM PREP: Create test sockaddr_un: path = ../tmp/unix.03bb1o PREP: Server: create socket PREP: Server: bind address ../tmp/unix.03bb1o to socket PREP: Server: listen on socket PREP: Server: notify client ready to accept PREP: Server: accept connection INFO: Server: accepted connection from address ../tmp/uclient.00EfOU PREP: sleep_server: wait for parent to complete test CLEANUP: sleep_server: flush data INFO: Server terminated INFO: Server received signal 15 INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Bind address ../tmp/uclient.00EfOU to socket PREP: Connect to address ../tmp/unix.03bb1o PREP: Set O_NONBLOCK PREP: Clear O_NONBLOCK on socket PREP: Call setsockopt to set timeout value INFO: setsockopt for SO_SNDTIMEO unsupported for AF_UNIX SOCK_STREAM socket type/default protocol TEST: AF_INET SOCK_DGRAM PREP: Create test sockaddr_in: address = 129.146.85.169, port = 4050 PREP: Server: create socket PREP: Server: bind address 129.146.85.169, port 4050 to socket PREP: Server: notify client server is ready PREP: Server: wait for parent to complete test INFO: Server terminated PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 129.146.85.169, port 4050 PREP: Set O_NONBLOCK PREP: Fill up the server ERROR: Socket did not fill after 2000 messages CLEANUP: Have server flush data ERROR: Timed out waiting for completion. 44 UNRESOLVED
|
Review Information
Review Type |
TSMA Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Recommendation |
No Resolution Given |
Review Response |
We recommend this request be sent for 14 day review. We tend to think the submitter has a valid point but as the primary thrust here is imputing implementation defined behavior not defined by the XNS we believe this should be reviewed by those responsible for the specification.
|
Review Type |
SA Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Resolution |
No Resolution Given |
Review Conclusion |
In order to move forward on this issue we have granted a Temporary Interpretation. It is also being sent out for a 14 day review to consider whether it should be a Temporary Waiver or Permanent Interpretation.
|
Review Type |
Expert Group Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Resolution |
No Resolution Given |
Review Conclusion |
The test suite is attempting to test a condition that is not testable. It is assuming that the send buffer is full when a large number of messages have been queued, but it is possible that the messages have in fact been transmitted (and that some have been discarded by the network). In this case a test suite deficiency should be granted.
|
Review Type |
SA Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Resolution |
Test Suite Deficiency (TSD) |
Review Conclusion |
This is an agreed Test Suite Deficiency.
|
Problem Reporting System Options:
|