1 #include "platform_api.h"
2 #include <msp/core/systemerror.h>
3 #include "clientsocket.h"
4 #include "socket_private.h"
9 ClientSocket::ClientSocket(Family af, int type, int proto):
10 Socket(af, type, proto)
13 ClientSocket::ClientSocket(const Private &p, const SockAddr &paddr):
16 peer_addr(paddr.copy())
19 ClientSocket::~ClientSocket()
21 signal_flush_required.emit();
24 void ClientSocket::shutdown(IO::Mode m)
31 else if(m==IO::M_WRITE)
33 else if(m==IO::M_RDWR)
38 else if(m==IO::M_WRITE)
40 else if(m==IO::M_RDWR)
46 ::shutdown(priv->handle, how);
50 const SockAddr &ClientSocket::get_peer_address() const
53 throw bad_socket_state("not connected");
57 size_t ClientSocket::do_write(const char *buf, size_t size)
59 check_access(IO::M_WRITE);
61 throw bad_socket_state("not connected");
66 return check_sys_error(::send(priv->handle, buf, size, 0), "send");
69 size_t ClientSocket::do_read(char *buf, size_t size)
71 check_access(IO::M_READ);
73 throw bad_socket_state("not connected");
78 size_t ret = check_sys_error(::recv(priv->handle, buf, size, 0), "recv");
79 if(ret==0 && !eof_flag)
82 set_socket_events(S_NONE);
83 signal_end_of_file.emit();