#include "lwip/sockets.h" #define LINGER_TIMEOUT_SEC 5 static void testLwip(const char * remote_addr, uint16_t remote_port ){ int socket; struct sockaddr_in sin; struct linger linger; int rc; if( (socket = lwip_socket(AF_INET, SOCK_STREAM, 0)) == -1 ){ logPrintf(NULL,"Failed to open socket\n"); return; } memset( &sin, 0, sizeof(sin) ); sin.sin_family = AF_INET; sin.sin_port = htons(remote_port); sin.sin_addr.s_addr = inet_addr(remote_addr); rc = lwip_connect(socket, (struct sockaddr*)&sin, sizeof(struct sockaddr_in)); if( rc != 0 ){ logPrintf(NULL,"lwip_connect() failed\n"); lwip_close(socket); return; } logPrintf(NULL,"The connection is established\n"); rc = lwip_shutdown(socket,SHUT_WR); if( rc != 0 ){ logPrintf(NULL,"lwip_shutdown() failed\n"); } linger.l_onoff = 1; linger.l_linger = LINGER_TIMEOUT_SEC; rc = lwip_setsockopt(socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger)); if (rc<0) { logPrintf(NULL, "setsockopt() failed\n"); } logPrintf(NULL, "Try to close socket\n"); rc = lwip_close(socket); if (rc<0) { logPrintf(NULL, "lwip_close() failed\n"); } else { logPrintf(NULL, "Socket closed\n"); } }