History: ip_socket


This page describes all changes made to the ip_socket package, the TCP/IP Sockets Interface module, since its release.

Version

4.7 (2019-11-25, 15:57):

  • MISRA-C:2004: violations eliminated

4.6 (2019-07-10, 17:39):

  • Include route.h in socket.c when SOCK_SENDTO_IPV4_BCAST_TO_ALL_INTERFACES is enabled to avoid compilation issues.

4.5 (2019-06-04, 19:00):

  • Added SOCK_SENDTO_IPV4_BCAST_TO_ALL_INTERFACES configuration option. If this is enabled DGRAM packets with global broadcast address destination are sent to all active interfaces.

4.4 (2019-02-13, 16:55):

  • MISRA-C:2004: violations eliminated.

4.3 (2019-01-21, 15:25)

  • Corrected setting of receive sockets in socket_select() for non-blocking connection.
  • Corrected setting of POLLIN flag in socket_poll() for non-blocking connection.
  • POLLHUP and POLLNVAL flags are always set if they occur.
  • socket_recv() now returns 0 if connection is disconnected.

4.2 (2018-09-21, 12:40):

  • SOCK_ERRNO_VARIABLE_NAME option can be defined by user.
  • Compiler error was eliminated which occurred when OS was used and SOCK_TASK_ERRNO was configured to 0.
  • Added socket_inet_addr() function.

4.1r2 (2018-08-29, 18:14):

  • Document HTML link added to the documentation folder.
  • History and document files renamed to the package name.

4.1 (2018-02-20, 11:23):

  • Defines and type names were changed to avoid conflict with native socket implementations.
  • socket_bind(): uninitialized variable may lead to incoming broadcast messages being dropped.

3.35 (2017-11-16, 09:08):

Bug appeared in 3.31 was fixed: soBcket_sendto() can handle packets larger than MTU.

3.34 (2017-10-27, 11:13):

  • Added support for new socket options:

      SO_KEEPALIVE - TCP only: enables/disables TCP keep-alive mechanism.

      SO_BROADCAST - UDP only: enables/disables broadcast datagrams (broadcast datagrams are not prohibited -> no functional change).

      SO_REUSEADDR - TCP/UDP : enables/disables SO_REUSEADDR (stack already behaves accordingly -> no functional change).

      SO_NODELAY   - TCP only: enables/disables TCP NO_DELAY (stack does not use Nagle's algorithm -> no functional change).

3.33 (2017-10-16, 15:00):

  • Added auto port binding after first send of DGRAM.
  • Added (void) casts to oal_mutex_get()/oal_mutex_put().
  • Added check to prohibit multiple socket_bind on a single DGRAM.

3.32 (2017-10-10, 13:20):

  • Added flag SOCK_NCLOSE that indicates that TCP connection already received IP_NTF_CON_CLOSE, IP_NTF_CON_ABORT notification. TCP sockets are now closed correctly when peer disconnects first.

3.31 (2017-10-02, 08:05):

  • socket_sendto() can send zero length packet.
  • UDP port can be opened for specific IP address.

3.30 (2017-09-11, 15:30)

  • TCP socket is not reused if the related TCP connection is not finally closed.

3.29:

  • tcp_accept() timeout is now controlled by SO_RCVTIMEO.
  • tcp_connect() timeout is now controlled by SO_SNDTIMEO.
  • socket_recv()/socket_recvfrom() now correctly sets error code when socket is closed during execution of function.
  • socket_gethostbyname() now adds terminating null character to h_name.
  • Corrected compilation warnings.

3.28:

  • Corrected gethostbyname() to get only IPv4 addresses.

3.27:

  • Corrected calling of ip_addr_to_str() in socket_inet_ntoa().
  • Added NULL pointer check for input value p_arg in socket_ioctl().
  • Corrected excludion of socket_inet_aton(), socket_inet_ntoa() when IPv4 is disabled.

3.26:

  • Corrected compilation warnings.

3.25:

  • An error was fixed in socket_addrst2ipport() which prevented socket_sendto() sending data.

3.24:

  • socket_poll() and socket_select() functions could only recognize the first connection on a listening socket.

3.23:

  • added IPv6 support.
  • updated to work with TCP major version 6.
  • updated to work with UDP base major version 6.
  • updated to work with IP base major version 6.

3.22:

  • updated to work with TCP major version 5
  • updated to work with IP base major version 5.
  • socket_bind() can be called before socket_connect() to define a local port for the STREAM sockets.

3.21:

  • SO_LINGER option was implemented: socket_close() waits for completion of sending TCP packets before disconnecting to prevent data loss.

3.20:

  • select and poll are waiting for connection on unconnected sockets in the socket descriptors selected for incoming transfers.

3.19:

  • select and poll could have been waken up incorrectly indicating no events (when waiting for received packets and transmission was complete on the socket).
  • select could incorrectly set a readfd if only exceptfd occurred.
  • select could return incorrect exceptional descriptor.

3.18:

  • SO_RCVINFOEN and SO_RCVINFO non-standard options added. These options are only available if SOCK_RCV_INFO_ENABLE configuration option is enabled.

3.17:

  • Socket layer could lockup if an event occurred on a UDP/TCP socket during a call to: socket_setopt() for ADD_MEMBERSHIP/DROP_MEMBERSHIP, socket_close() for a UDP socket with multicast membership, socket_ioctl() with FIONREAD command, socket_select() and socket_poll()
  • socket_poll()/socket_select() could keep waiting forever if the examined socket(s) was closed.
  • Event receive reorganized to avoid unexpected event reception from the caller task with some RTOSes.

3.16:

  • FIONREAD ioctl returns now the correct amount of unread bytes, before it reported the amount of unread bytes in the socket layer.
  • Updated to work with UDP major version 5 and TCP major version 4.

3.15:

  • Required package version checks added.

3.14:

  • socket_bind() accepts any IP address (not just IN_ADDR_ANY)
  • socket_get_errno() returns SOCKET_SUCCESS in case the errno is set because the task was not registered with ip_enter_task().

3.13:

  • Changed to use the new tcp_get_buf() and udp_get_buf() function formats.

3.12:

  • include psp_string.h from api_ip_socket.h to have prototype for psp_memset() used at FD_ZERO.

3.11:

  • In non-blocking mode socket_accept exhausted all socket entries if there was an existing connection for that port.
  • Connections established with socket_accept could sometimed incorrectly return error.

3.10:

  • socket_close() didn't drop multicast group memberships memberships.

3.9:

  • socket_inet_ntoa and socket_inet_aton functions added.
  • socket_htons, socket_htonl, socket_ntohs and socket_ntohl functions added for compatibility reasons.
  • socket_gethostbyname and socket_gethostbyaddr functions added.
  • socket_ioctl function added.
  • IP_MULTICAST_IF, IP_MULTICAST_TTL, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP socket options added.
  • SO_PRIORITY socket option added.
  • set base port number for DGRAM sockets to be able to use sendto without bind.
  • In socket_recv and socket_recvfrom return code changed to SOCKET_ERROR (-1) in case no data is available and set errno to EAGAIN.
  • changed to use new udp_send function.
  • poll/select didn't report frames arrived right after socket_accept, causing an erroneous situation that poll/select was blocking and waiting for incoming data while it was already available.
  • aborted connections were not reported causing the socket left in open state (there was no indication that socket_close needs to be called).
  • An accepted and closed connection could corrupt the following accepted connections.

3.8:

  • Warning removed in case IP_UDP_ENABLE is not set in config_ip.h.

3.7:

  • Removed MTU size packet setting from socket_sendto() and socket_send() when getting a buffer.

3.6:

  • Comments fixed.

3.5:

  • Third parameter of get_free_socket() call in socket_accept(): set to 0 instead of NULL (warning eliminated).

3.4:

  • listen didn't return error if backlog was a negative number only when it was zero.
  • send, sendto, recv, recvfrom also returns error if length is a negative number not only when it's zero.
  • set errno to EPERM in socket_get_errno if the task is not registered.

3.3:

socket_get_errno return error if the output parameter is NULL

3.2:

  • socket_get_errno() introduced, this function gives back task specific error codes.
  • socket functions will return -1 and set global error code to EBADF if socket number is valid but it is not opened.
  • INV_SOCKDESC removed and SOCKET_ERROR, SOCKET_SUCCESS introduced.

3.1:

  • select/poll didn't return if FIN was received.
  • poll could cause a crash if used with socket that was created due to an accepted connection.
  • SOCK_DGRAM socket close fixed (was not closed properly)
  • socket_accept returned 0 even if no more entries were available

3.0:

  • all functions renamed to avoid conflicts with standard function. "socket_" prefix has been added to all functions except for: socket -> socket_open, getsockopt -> socket_getopt and setsockopt -> socket_setopt.

2.0:

multi-interface compliant

1.2:

  • needless error numbers removed from API.

1.1:

  • incorrect close function behavior if accept was not called after listen.
  • comments added

1.0:

  • Initial release