#define _WIN32_WINNT 0x0501
#include <winsock2.h>
#include <ws2tcpip.h>
-#endif
-
-#include <string.h>
-#include <unistd.h>
-
-#ifndef _WIN32
+#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <sys/ioctl.h>
#endif
-
+#include <string.h>
+#include <unistd.h>
#include <errno.h>
#include "protocol.h"
static gboolean data_available(struct ipdbg_la_tcp *tcp)
{
-#ifdef __WIN32__
- ioctlsocket(tcp->socket, FIONREAD, &bytes_available);
+#ifdef _WIN32
+ u_long bytes_available;
+ if(ioctlsocket(tcp->socket, FIONREAD, &bytes_available) != 0){
#else
- int status;
-
- if (ioctl(tcp->socket, FIONREAD, &status) < 0) { // TIOCMGET
+ int bytes_available;
+ if (ioctl(tcp->socket, FIONREAD, &bytes_available) < 0){ // TIOCMGET
+#endif
sr_err("FIONREAD failed: %s\n", g_strerror(errno));
return FALSE;
}
-
- return (status < 1) ? FALSE : TRUE;
-#endif // __WIN32__
+ return (bytes_available > 0);
}
SR_PRIV struct ipdbg_la_tcp *ipdbg_la_tcp_new(void)
{
int ret = SR_OK;
+#ifdef _WIN32
+ if (shutdown(tcp->socket, SD_SEND) != SOCKET_ERROR)
+ {
+ char recvbuf[16];
+ int recvbuflen = 16;
+ // Receive until the peer closes the connection
+ while(recv(tcp->socket, recvbuf, recvbuflen, 0) > 0);
+ }
+#endif
if (close(tcp->socket) < 0)
ret = SR_ERR;
static int tcp_send(struct ipdbg_la_tcp *tcp, const uint8_t *buf, size_t len)
{
int out;
- out = send(tcp->socket, buf, len, 0);
+ out = send(tcp->socket, (const char *)buf, len, 0);
if (out < 0) {
sr_err("Send error: %s", g_strerror(errno));
if (data_available(tcp)) {
while (received < 1) {
- int len = recv(tcp->socket, buf, 1, 0);
+ int len = recv(tcp->socket, (char *)buf, 1, 0);
if (len < 0) {
sr_err("Receive error: %s", g_strerror(errno));