*/
-#include <config.h>
+#include "mem_config.h"
#include "util/instance.hpp"
#include <cstdio>
-#include <sstream>
#include <iostream>
#include <netdb.h>
+#include <netinet/in.h>
#include <poll.h>
+#include <sstream>
#include <sys/socket.h>
#include <sys/types.h>
-#include <netinet/in.h>
+
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifndef INVALID_SOCKET
+# define INVALID_SOCKET -1
+#endif
+
+#ifndef SOCKET_ERROR
+# define SOCKET_ERROR -1
+#endif
+
+#ifndef get_socket_errno
+# define get_socket_errno() errno
+#endif
+
+#ifndef closesocket
+# define closesocket(a) close(a)
+#endif
namespace datadifferential {
case READING:
if (operation->has_response())
{
- size_t total_read;
ssize_t read_length;
do
{
char buffer[BUFSIZ];
- read_length= recv(_sockfd, buffer, sizeof(buffer), 0);
+ read_length= ::recv(_sockfd, buffer, sizeof(buffer), 0);
if (read_length < 0)
{
switch(errno)
{
default:
- std::cerr << "Error occured while reading data from " << _host.c_str() << std::endl;
+ _last_error.clear();
+ _last_error+= "Error occured while reading data from ";
+ _last_error+= _host;
return false;
}
}
+ else if (read_length == 0)
+ {
+ _last_error.clear();
+ _last_error+= "Socket was shutdown while reading from ";
+ _last_error+= _host;
+
+ return false;
+ }
operation->push(buffer, static_cast<size_t>(read_length));
- total_read+= static_cast<size_t>(read_length);
+
} while (more_to_read());
} // end has_response
void Instance::close_socket()
{
if (_sockfd == INVALID_SOCKET)
+ {
return;
+ }
/* in case of death shutdown to avoid blocking at close() */
if (shutdown(_sockfd, SHUT_RDWR) == SOCKET_ERROR && get_socket_errno() != ENOTCONN)
void Instance::free_addrinfo()
{
- if (not _addrinfo)
+ if (_addrinfo == NULL)
+ {
return;
+ }
freeaddrinfo(_addrinfo);
_addrinfo= NULL;