[remote-processor] Add context information on failure
BZ: 190038
Remote processor was not displaying information in case of network
read/write error.
Add some error messages to ease debug.
Change-Id: I465062e8cf77f94b3d4d4d0c71338c4630aac276
Signed-off-by: Kevin Rocard <kevinx.rocard@intel.com>
Signed-off-by: Mattijs Korpershoek <mattijsx.korpershoek@intel.com>
diff --git a/remote-processor/Socket.h b/remote-processor/Socket.h
index 9ecc38a..e8d360f 100644
--- a/remote-processor/Socket.h
+++ b/remote-processor/Socket.h
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright (c) 2011-2014, Intel Corporation
* All rights reserved.
*
@@ -37,6 +37,14 @@
struct sockaddr_in;
struct in_addr;
+/** Readable and writable socket.
+ *
+ * The class does not encapsulate completely it's internal file descriptor as
+ * it can be retrieve by the getFd method.
+ *
+ * This "feature" means that it's state consistency can not
+ * be enforced by the class but rather by clients.
+ */
class CSocket
{
public:
@@ -50,16 +58,56 @@
// Communication timeout
void setTimeout(uint32_t uiMilliseconds);
- // Read
+ /* Read data
+ *
+ * On failure errno will be set appropriately (see send).
+ * If the client disconnects, false will be returned and
+ * - hasPeerDisconnected will return true
+ * - errno is set to ECONNRESET.
+ * @param[in] pvData - on success: will contain the sent data
+ * - on failure: undefined
+ * @param[in] uiSize size of the data to receive.
+ *
+ * @return true if all data could be read, false otherwise.
+ */
bool read(void* pvData, uint32_t uiSize);
- // Write
+
+ /* Write data
+ *
+ * On failure errno will be set (see recv)
+ * @param[in] pvData data to send.
+ * @param[in] uiSize is the size of the data to send.
+ *
+ * @return true if all data could be read, false otherwise.
+ */
bool write(const void* pvData, uint32_t uiSize);
- // Fd
+ /** @return the managed file descriptor.
+ *
+ * The client can then bind/connect/accept/listen/... the socket.
+ */
int getFd() const;
+
+ /** @return true if the peer has disconnected.
+ *
+ * The internal fd is returned by getFd and clients can use it for
+ * bind/connect/read/write/... as a result it's state can not be tracked.
+ *
+ * Thus hasPeerDisconnected returns true only if the disconnection
+ * was notified during a call to CSocket::write or CSocket::read.
+ */
+ bool hasPeerDisconnected();
+
protected:
// Socket address init
void initSockAddrIn(struct sockaddr_in* pSockAddrIn, uint32_t uiInAddr, uint16_t uiPort) const;
private:
int _iSockFd;
+ /** If the peer disconnected.
+ *
+ * This is not the state of _iSockFd (connected/disconnected)
+ *
+ * See hasPeerDisconnected for more details.
+ */
+ bool _disconnected;
};