written = write(fd, (char*) pData, remain);
if (written < 0)
{
- SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
-
ReleaseFd(fd);
+
+ if (errno == EAGAIN)
+ {
+ SysLogException(NID_IO, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] The socket buffer is full.");
+ return E_RESOURCE_UNAVAILABLE;
+ }
+
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
return E_SYSTEM;
}
written = write(fd, (char*) pData, remain);
if (written < 0)
{
- SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
-
ReleaseFd(fd);
+
+ if (errno == EAGAIN)
+ {
+ SysLogException(NID_IO, E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] The socket buffer is full.");
+ return E_RESOURCE_UNAVAILABLE;
+ }
+
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
return E_SYSTEM;
}
* @param[in] message The message to send
* @exception E_SUCCESS The method was successful.
* @exception E_INVALID_STATE The instance is in an invalid state.
+ * @exception E_RESOURCE_UNAVAILABLE The socket buffer is full.
* @exception E_OUT_OF_MEMORY Insufficient memory.
* @exception E_SYSTEM A system error occurred.
*
* @exception E_SUCCESS The method was successful.
* @exception E_INVALID_ARG The message is synchronous.
* @exception E_INVALID_OPERATION The client didn't set a listener.
+ * @exception E_RESOURCE_UNAVAILABLE The socket buffer is full.
* @exception E_OUT_OF_MEMORY Insufficient memory.
* @exception E_SYSTEM A system error occurred.
*
*/
result SendResponse(int clientId, const IPC::Message& message);
- result Start(void);
-
result SendResponse(int clientId, IPC::Message* pMessage);
+ result Start(void);
+
bool Send(IPC::Message* msg);
private:
ret = g_io_channel_write_chars(pClientInfo->pReverseChannel, (char*) pData, remain, &written, &pGError);
if (ret != G_IO_STATUS_NORMAL)
{
- 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.");
+ SysTryCatch(NID_IO, ret != G_IO_STATUS_AGAIN, , E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] The socket buffer is full.");
+
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
+ delete pMessage;
+ return E_SYSTEM;
}
remain -= written;
ret = g_io_channel_write_chars(pClientInfo->pReverseChannel, (char*) pData, remain, &written, &pGError);
if (ret != G_IO_STATUS_NORMAL)
{
- 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.");
+ SysTryCatch(NID_IO, ret != G_IO_STATUS_AGAIN, , E_RESOURCE_UNAVAILABLE, "[E_RESOURCE_UNAVAILABLE] The socket buffer is full.");
+
+ SysLogException(NID_IO, E_SYSTEM, "[E_SYSTEM] Failed to send a request: %d, %s", errno, strerror(errno));
+ return E_SYSTEM;
}
remain -= written;