repositories
/
deb_libcec.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cec: keep the 'busy state' of the command handler in CCECBusDevice
[deb_libcec.git]
/
src
/
lib
/
platform
/
windows
/
os-socket.h
diff --git
a/src/lib/platform/windows/os-socket.h
b/src/lib/platform/windows/os-socket.h
index ad98edb59e5c46648abdd8131a2cc4511d787c5a..5174cba1aaa5e5db4535a345a844c10d005d47b2 100644
(file)
--- a/
src/lib/platform/windows/os-socket.h
+++ b/
src/lib/platform/windows/os-socket.h
@@
-34,7
+34,6
@@
#include "../os.h"
#include "../util/timeutils.h"
#include "../os.h"
#include "../util/timeutils.h"
-#pragma comment(lib, "Ws2_32.lib")
#include <ws2spi.h>
#include <ws2ipdef.h>
#include <ws2tcpip.h>
#include <ws2spi.h>
#include <ws2ipdef.h>
#include <ws2tcpip.h>
@@
-74,10
+73,16
@@
namespace PLATFORM
inline ssize_t SerialSocketWrite(serial_socket_t socket, int *iError, void* data, size_t len)
{
inline ssize_t SerialSocketWrite(serial_socket_t socket, int *iError, void* data, size_t len)
{
+ if (len != (DWORD)len)
+ {
+ *iError = EINVAL;
+ return -1;
+ }
+
DWORD iBytesWritten(0);
if (socket != INVALID_HANDLE_VALUE)
{
DWORD iBytesWritten(0);
if (socket != INVALID_HANDLE_VALUE)
{
- if (!WriteFile(socket, data, len, &iBytesWritten, NULL))
+ if (!WriteFile(socket, data,
(DWORD)
len, &iBytesWritten, NULL))
{
*iError = GetLastError();
return -1;
{
*iError = GetLastError();
return -1;
@@
-90,10
+95,16
@@
namespace PLATFORM
inline ssize_t SerialSocketRead(serial_socket_t socket, int *iError, void* data, size_t len, uint64_t iTimeoutMs /*= 0*/)
{
inline ssize_t SerialSocketRead(serial_socket_t socket, int *iError, void* data, size_t len, uint64_t iTimeoutMs /*= 0*/)
{
+ if (len != (DWORD)len)
+ {
+ *iError = EINVAL;
+ return -1;
+ }
+
DWORD iBytesRead(0);
if (socket != INVALID_HANDLE_VALUE)
{
DWORD iBytesRead(0);
if (socket != INVALID_HANDLE_VALUE)
{
- if(!ReadFile(socket, data, len, &iBytesRead, NULL) != 0)
+ if(!ReadFile(socket, data,
(DWORD)
len, &iBytesRead, NULL) != 0)
{
*iError = GetLastError();
return -1;
{
*iError = GetLastError();
return -1;
@@
-127,15
+138,16
@@
namespace PLATFORM
inline ssize_t TcpSocketWrite(tcp_socket_t socket, int *iError, void* data, size_t len)
{
if (socket == INVALID_SOCKET ||
inline ssize_t TcpSocketWrite(tcp_socket_t socket, int *iError, void* data, size_t len)
{
if (socket == INVALID_SOCKET ||
- socket == SOCKET_ERROR)
+ socket == SOCKET_ERROR ||
+ len != (int)len)
{
*iError = EINVAL;
return -1;
}
{
*iError = EINVAL;
return -1;
}
- ssize_t iReturn = send(socket, (char*)data, len, 0);
+ ssize_t iReturn = send(socket, (char*)data,
(int)
len, 0);
if (iReturn < (ssize_t)len)
if (iReturn < (ssize_t)len)
- *iError =
errno
;
+ *iError =
GetSocketError()
;
return iReturn;
}
return iReturn;
}
@@
-146,7
+158,8
@@
namespace PLATFORM
*iError = 0;
if (socket == INVALID_SOCKET ||
*iError = 0;
if (socket == INVALID_SOCKET ||
- socket == SOCKET_ERROR)
+ socket == SOCKET_ERROR ||
+ len != (int)len)
{
*iError = EINVAL;
return -1;
{
*iError = EINVAL;
return -1;
@@
-170,20
+183,29
@@
namespace PLATFORM
FD_ZERO(&fd_read);
FD_SET(socket, &fd_read);
FD_ZERO(&fd_read);
FD_SET(socket, &fd_read);
- if (select(socket + 1, &fd_read, NULL, NULL, &tv) == 0)
+ if (select((int)socket + 1, &fd_read, NULL, NULL, &tv) == 0)
+ {
+ *iError = ETIMEDOUT;
return ETIMEDOUT;
return ETIMEDOUT;
+ }
TcpSocketSetBlocking(socket, false);
}
ssize_t iReadResult = (iTimeoutMs > 0) ?
TcpSocketSetBlocking(socket, false);
}
ssize_t iReadResult = (iTimeoutMs > 0) ?
- recv(socket, (char*)data + iBytesRead,
len - iBytesRead, MSG_WAITALL
) :
- recv(socket, (char*)data, len, MSG_WAITALL);
+ recv(socket, (char*)data + iBytesRead,
(int)(len - iBytesRead), 0
) :
+ recv(socket, (char*)data,
(int)
len, MSG_WAITALL);
*iError = GetSocketError();
*iError = GetSocketError();
+
+ if (iTimeoutMs > 0)
+ {
+ TcpSocketSetBlocking(socket, true);
+ iNow = GetTimeMs();
+ }
+
if (iReadResult < 0)
{
if (iReadResult < 0)
{
- if (
errno
== EAGAIN && iTimeoutMs > 0)
+ if (
*iError
== EAGAIN && iTimeoutMs > 0)
continue;
continue;
- *iError = errno;
return -1;
}
else if (iReadResult == 0 || (iReadResult != (ssize_t)len && iTimeoutMs == 0))
return -1;
}
else if (iReadResult == 0 || (iReadResult != (ssize_t)len && iTimeoutMs == 0))
@@
-193,14
+215,12
@@
namespace PLATFORM
}
iBytesRead += iReadResult;
}
iBytesRead += iReadResult;
-
- if (iTimeoutMs > 0)
- {
- TcpSocketSetBlocking(socket, true);
- iNow = GetTimeMs();
- }
}
}
- return 0;
+
+ if (iBytesRead < (ssize_t)len && *iError == 0)
+ *iError = ETIMEDOUT;
+
+ return iBytesRead;
}
inline bool TcpResolveAddress(const char *strHost, uint16_t iPort, int *iError, struct addrinfo **info)
}
inline bool TcpResolveAddress(const char *strHost, uint16_t iPort, int *iError, struct addrinfo **info)
@@
-237,7
+257,7
@@
namespace PLATFORM
TcpSocketSetBlocking(socket, false);
*iError = 0;
TcpSocketSetBlocking(socket, false);
*iError = 0;
- int iConnectResult = connect(socket, addr->ai_addr, addr->ai_addrlen);
+ int iConnectResult = connect(socket, addr->ai_addr,
(int)
addr->ai_addrlen);
if (iConnectResult == -1)
{
if (GetSocketError() == EINPROGRESS ||
if (iConnectResult == -1)
{
if (GetSocketError() == EINPROGRESS ||
@@
-266,7
+286,7
@@
namespace PLATFORM
}
else
{
}
else
{
- *iError =
errno
;
+ *iError =
GetSocketError()
;
}
}
}
}