//disconnect session and clean-up data if any error occurs
if (res != CA_STATUS_OK)
{
-#ifdef __WITH_TLS__
- if (CA_STATUS_OK != CAcloseSslConnection(&svritem->sep.endpoint))
+ if (CA_STATUS_OK != CATCPDisconnectSession(&svritem->sep.endpoint))
{
- OIC_LOG(ERROR, TAG, "Failed to close TLS session");
+ OIC_LOG(ERROR, TAG, "Failed to disconnect TCP session");
}
-#endif
- CASearchAndDeleteTCPSession(&(svritem->sep.endpoint));
- return;
}
}
ssize_t remainLen = dlen;
do
{
+ size_t sendCounter = 0;
#ifdef MSG_NOSIGNAL
- ssize_t len = send(sockFd, data, remainLen, MSG_NOSIGNAL);
+ ssize_t len = send(sockFd, data, remainLen, MSG_DONTWAIT | MSG_NOSIGNAL);
#else
- ssize_t len = send(sockFd, data, remainLen, 0);
+ ssize_t len = send(sockFd, data, remainLen, MSG_DONTWAIT);
#endif
if (-1 == len)
{
- if (EWOULDBLOCK != errno)
+ if (EWOULDBLOCK != errno && EAGAIN != errno)
{
OIC_LOG_V(ERROR, TAG, "unicast ipv4tcp sendTo failed: %s", strerror(errno));
CALogSendStateInfo(endpoint->adapter, endpoint->addr, endpoint->port,
len, false, strerror(errno));
return len;
}
+ sendCounter++;
+ OIC_LOG_V(WARNING, TAG, "send blocked. trying %n attempt from 100", sendCounter);
+ if(sendCounter >= 100)
+ {
+ return len;
+ }
continue;
}
data += len;