}
r = __pStub->SendMessage(clientId, metadata, buffer);
+ SysTryReturn(NID_IO, r != E_RESOURCE_UNAVAILABLE, MESSAGEPORT_ERROR_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
+ "[E_RESOURCE_UNAVAILABLE] The socket receiver buffer of remote port is temporarily full.");
SysTryReturn(NID_IO, r == E_SUCCESS, MESSAGEPORT_ERROR_IO_ERROR, E_SYSTEM,
"[E_SYSTEM] Failed to send a message.");
- return E_SUCCESS;
+ return MESSAGEPORT_ERROR_NONE;
}
String
GError* pGError = null;
_ClientInfo* pClientInfo = null;
int ret = 0;
+ int retry = 0;
SysTryReturn(NID_IO, client >= 0 && pMessage != null, false, E_INVALID_ARG,
"[E_INVALID_ARG] pMessage(0x%x) is null or clinet(%d) < 0", pMessage,
while (remain > 0)
{
- pGError = NULL;
+ pGError = null;
ret = g_io_channel_write_chars(pClientInfo->pReverseChannel, (char*) pData, remain, &written, &pGError);
- if (ret != G_IO_STATUS_NORMAL)
+ if (ret == G_IO_STATUS_AGAIN)
{
- SysLog(NID_IO, "Failed to send a response: %d", ret);
- SysTryCatch(NID_IO, ret != G_IO_STATUS_ERROR, , E_SYSTEM, "[E_SYSTEM] Error occurred during writing message to socket.");
+ ++retry;
+ SysTryCatch(NID_IO, retry <= 2, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
+ "[E_RESOURCE_UNAVAILABLE] The socket receiver buffer of remote port is temporarily full.");
+ }
+ else if (ret != G_IO_STATUS_NORMAL)
+ {
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Error occurred during writing data to socket.");
+ r = E_SYSTEM;
+ goto CATCH;
}
remain -= written;
g_io_channel_flush(pClientInfo->pReverseChannel, &pGError);
delete pMessage;
-
return E_SUCCESS;
CATCH:
+ if (pGError)
+ {
+ SysLog(NID_IO, "GError is %s", pGError->message);
+ }
delete pMessage;
return r;
}
GError* pGError = null;
_ClientInfo* pClientInfo = null;
int ret = 0;
+ int retry = 0;
SysTryReturn(NID_IO, client >= 0, false, E_INVALID_ARG, "[E_INVALID_ARG] clinet(%d) < 0", client);
SysTryCatch(NID_IO, !message.is_sync(), r = E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Can't send sync. messagee.");
while (remain > 0)
{
- pGError = NULL;
+ pGError = null;
ret = g_io_channel_write_chars(pClientInfo->pReverseChannel, (char*) pData, remain, &written, &pGError);
- if (ret != G_IO_STATUS_NORMAL)
+ if (ret == G_IO_STATUS_AGAIN)
{
- SysLog(NID_IO, "Failed to send a response: %d", ret);
- SysTryCatch(NID_IO, ret != G_IO_STATUS_ERROR, , E_SYSTEM, "[E_SYSTEM] Error occurred during writing message to socket.");
+ ++retry;
+ SysTryCatch(NID_IO, retry <= 2, r = E_RESOURCE_UNAVAILABLE, E_RESOURCE_UNAVAILABLE,
+ "[E_RESOURCE_UNAVAILABLE] The socket receiver buffer of remote port is temporarily full.");
+ }
+ else if (ret != G_IO_STATUS_NORMAL)
+ {
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Error occurred during writing data to socket.");
+ r = E_SYSTEM;
+ goto CATCH;
}
remain -= written;
return E_SUCCESS;
CATCH:
+ if (pGError)
+ {
+ SysLog(NID_IO, "GError is %s", pGError->message);
+ }
return r;
}
+