repositories
/
deb_libcec.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
posix: fixed lib/platform/sockets/tcp.h compilation and some bugs. added CTcpSocket...
[deb_libcec.git]
/
src
/
lib
/
platform
/
sockets
/
tcp.h
diff --git
a/src/lib/platform/sockets/tcp.h
b/src/lib/platform/sockets/tcp.h
index 47c71b7754eeb3e0b043df9bfd3172a4d07fdc52..ef9c418aaa82568d7b24008e0e8be5c487605add 100644
(file)
--- a/
src/lib/platform/sockets/tcp.h
+++ b/
src/lib/platform/sockets/tcp.h
@@
-39,52
+39,62
@@
#include "../posix/os-tcp.h"
#endif
#include "../posix/os-tcp.h"
#endif
+using namespace std;
+
namespace PLATFORM
{
class CTcpSocket : public CSocket
{
public:
namespace PLATFORM
{
class CTcpSocket : public CSocket
{
public:
- CTcpSocket(void);
+ CTcpSocket(void)
{}
;
virtual ~CTcpSocket(void) {}
virtual bool Open(const CStdString &strHostname, uint16_t iPort, uint64_t nTimeout)
{
bool bReturn(false);
virtual ~CTcpSocket(void) {}
virtual bool Open(const CStdString &strHostname, uint16_t iPort, uint64_t nTimeout)
{
bool bReturn(false);
- struct addrinfo *address
, *addr
;
-
int iResult = TcpResolveAddress(strHostname, iPort, address
);
- if (
iResult
)
+ struct addrinfo *address
(NULL), *addr(NULL)
;
+
CLockObject lock(m_mutex
);
+ if (
!TcpResolveAddress(strHostname.c_str(), iPort, &m_iError, &address)
)
{
{
- m_strError = strerror(
iResult
);
+ m_strError = strerror(
m_iError
);
return bReturn;
}
for(addr = address; !bReturn && addr; addr = addr->ai_next)
{
return bReturn;
}
for(addr = address; !bReturn && addr; addr = addr->ai_next)
{
- int iError(0);
- m_socket = TcpCreateSocket(addr, &iError, nTimeout);
+ m_socket = TcpCreateSocket(addr, &m_iError, nTimeout);
if (m_socket != INVALID_SOCKET && m_socket != SOCKET_ERROR)
bReturn = true;
else
if (m_socket != INVALID_SOCKET && m_socket != SOCKET_ERROR)
bReturn = true;
else
- m_strError = strerror(iError);
+ m_strError = strerror(
m_
iError);
}
freeaddrinfo(address);
return bReturn;
}
}
freeaddrinfo(address);
return bReturn;
}
+ virtual void Shutdown(void)
+ {
+ CLockObject lock(m_mutex);
+ if (m_socket != INVALID_SOCKET && m_socket != SOCKET_ERROR)
+ TcpShutdownSocket(m_socket);
+ m_socket = INVALID_SOCKET;
+ m_strError = "";
+ }
+
protected:
virtual socket_t TcpCreateSocket(struct addrinfo* addr, int* iError, uint64_t iTimeout)
{
socket_t fdSock = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
protected:
virtual socket_t TcpCreateSocket(struct addrinfo* addr, int* iError, uint64_t iTimeout)
{
socket_t fdSock = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
- if (fdSock ==
-1
)
+ if (fdSock ==
INVALID_SOCKET || fdSock == SOCKET_ERROR
)
{
{
- *iError =
TcpGetSocketError()
;
+ *iError =
errno
;
return (socket_t)SOCKET_ERROR;
}
return (socket_t)SOCKET_ERROR;
}
- if (
TcpConnectSocket(addr, fdSock, iError, iTimeout) != 0
)
+ if (
!TcpConnectSocket(fdSock, addr, iError, iTimeout)
)
{
{
-
closesocket
(fdSock);
+
SocketClose
(fdSock);
return (socket_t)SOCKET_ERROR;
}
return (socket_t)SOCKET_ERROR;
}