Report 1603 Actions
Problem Report Number |
1603 |
Submitter's Classification |
Test Suite problem |
State |
Resolved |
Resolution |
Permanent Interpretation (PIN) |
Problem Resolution ID |
PIN.X.0160 |
Raised |
1996-04-02 08:00 |
Updated |
2003-03-13 08:00 |
Published |
1996-04-26 08:00 |
Product Standard |
Sockets (UNIX 95) |
Certification Program |
The Open Brand certification program |
Test Suite |
VSU version 4.1.0 |
Test Identification |
CAPI.os/sockets/recv 2 |
Specification |
Networking Services Issue 4 |
Location in Spec |
See Problem Text |
Problem Summary |
PIN4U.00026 This IR claims that MSG_WAITALL is not a required flag to be supported. |
Problem Text |
This IR claims that MSG_WAITALL is not a required flag to be supported.
All of the above testcases fail because they are attempting to call either recv, recvmsg, or recvfrom with the MSG_WAITALL flag set. We do not support this flag on these calls and the EOPNOTSUPP indicates that it is allowed that this flag may not be supported on some socket types or protocols.
The test suite should control the use of this flag by a configuration variable and cannot assume that all implementations under test support setting this flag.
|
Test Output |
TEST PURPOSE #2 If the implementation supports a communications domain and a connection-oriented socket type: A call to ssize_t recv(int socket, void *buffer, size_t length, int flags) when MSG_WAITALL is set in flags shall block until the full amount of data requested can be returned. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 4249 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 4249 PREP: Send test data PREP: Send more test data which will be echoed after a delay TEST: Receive blocks until both messages received ERROR: recv call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 4249 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 198.151.241.50, port 1097 PREP: echo_server: read and echo data INFO: echo_server: echoed 11 bytes of data (ABC123TEST!) INFO: Server received signal 15 INFO: Server terminated 2 FAIL
TEST CASE: recvfrom
TEST PURPOSE #4 If the implementation supports a communications domain and a connection-oriented socket type: A call to ssize_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, size_t *address_len) when MSG_WAITALL is set in flags shall block until the full amount of data requested can be returned. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 3773 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 3773 PREP: Send test data PREP: Send more test data which will be echoed after a delay TEST: Receive blocks until both messages received ERROR: recvfrom call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 3773 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 198.151.241.50, port 1106 PREP: echo_server: read and echo data INFO: echo_server: echoed 11 bytes of data (ABC123TEST!) INFO: Server received signal 15 INFO: Server terminated 4 FAIL
TEST CASE: recvmsg
TEST PURPOSE #7 If the implementation supports a communications domain and a connection-oriented socket type: A call to ssize_t recvmsg(int socket, struct msghdr *message, int flags) when MSG_WAITALL is set in flags shall block until the full amount of data requested can be returned. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 2257 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 2257 PREP: Send test data PREP: Send another test data message with a delay before echo TEST: rcvmsg blocks until both messages received ERROR: recvmsg call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 2257 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection IN: Server: accepted connection from address 198.151.241.50, port 1117 PREP: echo_server: read and echo data INFO: echo_server: echoed 25 bytes of data (ABCDEFGHIJKLMNOPQ123TEST!) INFO: Server received signal 15 INFO: Server terminated 7 FAIL
TEST CASE: send
TEST PURPOSE #1 If the implementation supports a communications domain and a socket type: A successful call to ssize_t send(int socket, const void *buffer, size_t length, int flags) shall initiate transmission of the data in the buffer described by buffer and length to the remote peer for the socket socket and return the number of bytes sent. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 1781 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 1781 PREP: Zero receive buffer TEST: Send test data TEST: Return value TEST: Receive test data ERROR: recv call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 1781 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 198.151.241.50, port 1123 PREP: echo_server: read and echo data INFO: echo_server: echoed 11 bytes of data (ABC123TEST!) INFO: Server received signal 15 INFO: Server terminated 1 FAIL
TEST CASE: sendmsg
TEST PURPOSE #1 If the implementation supports a communications domain and a connection-oriented socket type: A successful call to ssize_t sendmsg(int socket, const struct msghdr *message, int flags) for a connection-oriented socket shall initiate transmission of the data in the message described by message to the remote peer for the socket and return the number of bytes sent. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 4809 PREP: Create test sockaddr_in: address = 198.151.241.50, port = 4810 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 4809 TEST: Send test data TEST: Return value TEST: Receive test data ERROR: recv call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 4809 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 198.151.241.50, port 1130 PREP: echo_server: read and echo data INFO: echo_server: echoed 12 bytes of data (!ABC123TEST!) INFO: Server received signal 15 INFO: Server terminated 1 FAIL
TEST CASE: sendto
TEST PURPOSE #1 If the implementation supports a communications domain and a connection-oriented socket type: A successful call to ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, size_t dest_len) for a connection-oriented socket shall initiate transmission of the data in the message described by message to the remote peer for the socket and return the number of bytes sent. TEST: AF_INET SOCK_STREAM PREP: Create test sockaddr_in: address = 198.151.241.50, port = 65173 PREP: Create test sockaddr_in: address = 198.151.241.50, port = 65174 PREP: Wait for server to be ready PREP: Create a socket PREP: Connect socket to address 198.151.241.50, port 65173 PREP: Zero receive buffer TEST: Send test data TEST: Return value TEST: Receive test data ERROR: recv call failed, errno = 1112(EOPNOTSUPP - Operation not supported on socket) CLEANUP: Send SIGTERM to server PREP: Server: create socket PREP: Server: bind address 198.151.241.50, port 65173 to socket PREP: Server: listen on socket PREP: Server: notify client server is ready PREP: Server: accept connection INFO: Server: accepted connection from address 198.151.241.50, port 1138 PREP: echo_server: read and echo data INFO: echo_server: echoed 11 bytes of data (ABC123TEST!) INFO: Server received signal 15 INFO: Server terminated 1 FAIL
|
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 refused.
We believe the test is correct.
The use of EOPNOTSUPP only applies to flags that are not supported on particular protocols. Flags cannot be generically unsupported.
The conditions under which EOPNOTSUPP may be returned for spec-defined flags are delineated in the DESCRIPTION sections for these calls. MSG_OOB is the only flag that states:
The significance and semantics of out-of-band data are protocol-specific.
No such provision is made for MSG_WAITALL.
These statements are consistent with statements made in POSIX.1g/D6.1 in sections A.2.1.2.7, A.2.1.3.6, A.3.5.2.1.4, and A.3.5.3.1.4, Other Protocol-Specific Behavior. These sections describe when particular flags may return EOPNOTSUPP. MSG_OOB is the only flag that may return EOPNOTSUPP as described in the listed sections.
|
Review Type |
Expert Group Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Resolution |
No Resolution Given |
Review Conclusion |
The Base Working Group agreed that this is a grey area in the specification - the feature is poorly specified.
|
Review Type |
SA Review |
Start Date |
null |
Completed |
null |
Status |
Complete |
Review Resolution |
Permanent Interpretation (PIN) |
Review Conclusion |
A Permanent Interpretation is granted.
|
Problem Reporting System Options:
|