if (NULL == objArray[0])
{
fprintf(stderr, "Failed to create security object\r\n");
+ close(data.sock);
return -1;
}
data.securityObjP = objArray[0];
if (NULL == objArray[1])
{
fprintf(stderr, "Failed to create server object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[2])
{
fprintf(stderr, "Failed to create Device object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[3])
{
fprintf(stderr, "Failed to create Firmware object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[4])
{
fprintf(stderr, "Failed to create location object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[5])
{
fprintf(stderr, "Failed to create test object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[6])
{
fprintf(stderr, "Failed to create connectivity monitoring object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[7])
{
fprintf(stderr, "Failed to create connectivity statistics object\r\n");
+ close(data.sock);
return -1;
}
if (NULL == objArray[8])
{
fprintf(stderr, "Failed to create Access Control object\r\n");
+ close(data.sock);
return -1;
}
else if (acc_ctrl_obj_add_inst(objArray[8], instId, 3, 0, serverId)==false)
{
fprintf(stderr, "Failed to create Access Control object instance\r\n");
+ close(data.sock);
return -1;
}
else if (acc_ctrl_oi_add_ac_val(objArray[8], instId, 0, 0b000000000001111)==false)
{
fprintf(stderr, "Failed to create Access Control ACL default resource\r\n");
+ close(data.sock);
return -1;
}
else if (acc_ctrl_oi_add_ac_val(objArray[8], instId, 999, 0b000000000000001)==false)
{
fprintf(stderr, "Failed to create Access Control ACL resource for serverId: 999\r\n");
+ close(data.sock);
return -1;
}
}
if (cred.psk_identity == NULL && cred.psk == NULL) {
fprintf(stdout, "failed to set psk info\r\n");
- return -1;
+ goto lwm2mclient_err_exit;
}
}
data.tls_context = TLSCtx(&cred);
if (data.tls_context == NULL) {
fprintf(stdout, "TLS context initialize failed\r\n");
- return -1;
+ goto lwm2mclient_err_exit;
}
}
#endif
if (NULL == lwm2mH)
{
fprintf(stderr, "lwm2m_init2() failed\r\n");
- return -1;
+ goto lwm2mclient_err_exit;
}
/*
if (result != 0)
{
fprintf(stderr, "lwm2m_configure() failed: 0x%X\r\n", result);
- return -1;
+ goto lwm2mclient_err_exit;
}
//signal(SIGINT, handle_sigint);
}
else
#endif /* LWM2M_BOOTSTRAP */
- return -1;
+ goto lwm2mclient_err_exit;
}
#ifdef LWM2M_BOOTSTRAP
update_bootstrap_info(&previousState, lwm2mH);
if (0 > numBytes)
{
fprintf(stderr, "Error in recvfrom(): %d %s\r\n", errno, strerror(errno));
+ if (errno == ENOTCONN) {
+ /* To exit when TCP session has been unexpectedly closed*/
+ goto lwm2mclient_err_exit;
+ }
}
else if (0 < numBytes)
{
}
}
}
-
/*
* Finally when the loop is left smoothly - asked by user in the command line interface - we unregister our client from it
*/
close_backup_object();
#endif
lwm2m_close(lwm2mH);
+ lwm2mH = NULL;
}
+
+lwm2mclient_err_exit:
+ if (lwm2mH != NULL)
+ lwm2m_close(lwm2mH);
+
close(data.sock);
connection_free(data.connList);
coap_protocol_t proto = COAP_UDP;
+#ifdef WITH_MBEDTLS
char * pskId = NULL;
char * pskBuffer = NULL;
-#ifdef WITH_MBEDTLS
unsigned char psk[MBEDTLS_PSK_MAX_LEN];
/* set default tls option */
} else {
fprintf(stderr, "TCP session has been created\r\n");
connList = connection_new_incoming(connList, newsock, (struct sockaddr *)&addr, addrLen);
+ close(sock);
sock = newsock;
}
#ifdef WITH_MBEDTLS
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) < 0) {
fprintf(stderr, "Error : setsockopt failed %d\r\n", errno);
+ close(sock);
return -1;
}
if (NULL == lwm2mH)
{
fprintf(stderr, "lwm2m_init2() failed\r\n");
+ close(sock);
return -1;
}
if (numBytes == -1)
{
- fprintf(stderr, "Error in recvfrom(): %d\r\n", errno);
+ fprintf(stderr, "Error in recvfrom(): %d %s\r\n", errno, strerror(errno));
+ if (errno == ENOTCONN) {
+ fprintf(stderr, "Endpoint connection has been closed\r\n");
+ goto lwm2mserver_err_exit;
+ }
}
else
{
}
}
- lwm2m_close(lwm2mH);
+lwm2mserver_err_exit:
+ if (lwm2mH != NULL)
+ lwm2m_close(lwm2mH);
close(sock);
connection_free(connList);