Socket Options
Specific Socket Option API
µC/TCP-IP provides a set of APIs to configure sockets on an individual basis. These APIs are listed below and detailed in Network Socket Functions:
NetSock_CfgBlock
NetSock_CfgSecure
NetSock_CfgRxQ_Size
NetSock_CfgTxQ_Size
NetSock_CfgTxIP_TOS
NetSock_CfgTxIP_TTL
NetSock_CfgTxIP_TTL_Multicast
-
NetSock_CfgTimeoutConnAcceptDflt
() (TCP) NetSock_CfgTimeoutConnAcceptGet_ms
NetSock_CfgTimeoutConnAcceptSet
NetSock_CfgTimeoutConnCloseDflt
NetSock_CfgTimeoutConnCloseGet_ms
NetSock_CfgTimeoutConnCloseSet
NetSock_CfgTimeoutConnReqDflt
NetSock_CfgTimeoutConnReqGet_ms
NetSock_CfgTimeoutConnReqSet
NetSock_CfgTimeoutRxQ_Dflt
NetSock_CfgTimeoutRxQ_Get_ms
NetSock_CfgTimeoutRxQ_Set
NetSock_CfgTimeoutTxQ_Dflt
NetSock_CfgTimeoutTxQ_Get_ms
NetSock_CfgTimeoutTxQ_Set
Generic Socket Option API
µC/TCP-IP provides two APIs to read and configure socket option values. These APIs are listed below and detailed in Network Socket Functions:
Their BSD equivalent are listed below. See also BSD Functions.
Controlling Socket Blocking Options
By default all sockets are configured to block. It is possible to change that behavior by using the socket option API NetSock_CfgBlock() or when by setting a flag before calling Socket API. It is also possible to change the default configuration, see in net_cfg.h
for further details.
MSL
Maximum Segment Lifetime (MSL) is the time a TCP segment can exist in the network, and is defined as two minutes. 2MSL is twice this lifetime. It is the maximum lifetime of a TCP segment on the network because it supposes segment transmission and acknowledgment.
Currently, Micrium does not support multiple sockets with identical connection information. This prevents new sockets from binding to the same local addresses as other sockets. Thus, for TCP sockets, each close()
incurs the TCP 2MSL timeout and prevents the next bind()
from the same client from occurring until after the timeout expires. This is why the 2MSL value is used. This can lead to a long delay before the socket resource is released and reused. µC/TCP-IP configures the TCP connection's default maximum segment lifetime (MSL) timeout value, specified in integer seconds. A starting value of 3 seconds is recommended.
If TCP connections are established and closed rapidly, it is possible that this timeout may further delay new TCP connections from becoming available. Thus, an even lower timeout value may be desirable to free TCP connections and make them available for new connections as rapidly as possible. However, a 0 second timeout prevents µC/TCP-IP from performing the complete TCP connection close sequence and will instead send TCP reset (RST) segments.
For UDP sockets, the sockets close()
without delay. Thus, the next bind()
is not blocked.
TCP Keep-Alives
µC/TCP-IP support TCP Keep-Alives. RFC #1122 stipulate that "Keep-Alive mechanism periodically probes the other end of a connection when connection is otherwise idle, even when there is not data to be sent."
It is possible to enable the Keep-Alive option for a specific socket by using the function
NetSock_OptSet
with the option NET_SOCK_OPT_SOCK_KEEP_ALIVE
.
Knowing your TCP connection ID, you can also used the API function
NetTCP_ConnCfgTxKeepAliveEn
.
Each time the connection Idle timeout occurs, the stack will send a keep-alive message to probe the other end of the connection. The timeout value for a given TCP connection can be set with the
NetSock_OptSet
function and the NET_SOCK_OPT_TCP_KEEP_IDLE
option. Else, knowing your TCP connection ID, the API function NetTCP_ConnCfgIdleTimeout
can also be use.