M2M_SOCKET_BSD_TCP_KEEPALIVE option is used to send on the connection the keepalive message to prevent this connection from being broken.
M2M_SOCKET_BSD_SOCKET tcp_socket = M2M_SOCKET_BSD_INVALID_SOCKET;
INT32 keep_alive = 0;
tcp_socket = m2m_socket_bsd_socket( M2M_SOCKET_BSD_AF_INET, M2M_SOCKET_BSD_SOCK_STREAM,
M2M_SOCKET_BSD_IPPROTO_TCP );
keep_alive = 1;
/* Enable the keepalive feature */
res = m2m_socket_bsd_set_sock_opt(tcp_socket, M2M_SOCKET_BSD_SOL_SOCKET,
M2M_SOCKET_BSD_SO_KEEPALIVE, &keep_alive, sizeof(keep_alive));
/* Set the timeout value after which the keepalive will start */
keep_alive = 40000;
res = m2m_socket_bsd_set_sock_opt(tcp_socket, M2M_SOCKET_BSD_IPPROTO_TCP,
M2M_SOCKET_BSD_TCP_KEEPALIVE, &keep_alive, sizeof(keep_alive));
/* Define the remote socket parameters (port, ip address..) */
memset(&stSockAddr, 0, sizeof(struct M2M_SOCKET_BSD_SOCKADDR_IN));
stSockAddr.sin_family = M2M_SOCKET_BSD_PF_INET;
stSockAddr.sin_port = m2m_socket_bsd_htons(PORT);
stSockAddr.sin_addr.s_addr = m2m_socket_bsd_inet_addr(IP_SERVER);
/* Attempt to actually connect to the socket */
if (M2M_SOCKET_BSD_INVALID_SOCKET == m2m_socket_bsd_connect(tcp_socket, (M2M_SOCKET_BSD_SOCKADDR
*)&stSockAddr, sizeof(struct M2M_SOCKET_BSD_SOCKADDR_IN)))
···············