-#ifdef _WIN32
-#include <winsock2.h>
-#else
-#include <cerrno>
-#include <sys/socket.h>
-#endif
+#include "platform_api.h"
#include <msp/core/systemerror.h>
#include "clientsocket.h"
#include "socket_private.h"
return *peer_addr;
}
-unsigned ClientSocket::do_write(const char *buf, unsigned size)
+size_t ClientSocket::do_write(const char *buf, size_t size)
{
check_access(IO::M_WRITE);
if(!connected)
if(size==0)
return 0;
- int ret = ::send(priv->handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw system_error("send");
- }
-
- return ret;
+ return check_sys_error(::send(priv->handle, buf, size, 0), "send");
}
-unsigned ClientSocket::do_read(char *buf, unsigned size)
+size_t ClientSocket::do_read(char *buf, size_t size)
{
check_access(IO::M_READ);
if(!connected)
if(size==0)
return 0;
- int ret = ::recv(priv->handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw system_error("recv");
- }
- else if(ret==0 && !eof_flag)
+ size_t ret = check_sys_error(::recv(priv->handle, buf, size, 0), "recv");
+ if(ret==0 && !eof_flag)
{
eof_flag = true;
+ set_socket_events(S_NONE);
signal_end_of_file.emit();
- set_events(IO::P_NONE);
}
return ret;