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();
26 void ClientSocket::shutdown(IO::Mode m)
33 else if(m==IO::M_WRITE)
35 else if(m==IO::M_RDWR)
40 else if(m==IO::M_WRITE)
42 else if(m==IO::M_RDWR)
48 ::shutdown(priv->handle, how);
52 const SockAddr &ClientSocket::get_peer_address() const
55 throw bad_socket_state("not connected");
59 size_t ClientSocket::do_write(const char *buf, size_t size)
61 check_access(IO::M_WRITE);
63 throw bad_socket_state("not connected");
68 return check_sys_error(::send(priv->handle, buf, size, 0), "send");
71 size_t ClientSocket::do_read(char *buf, size_t size)
73 check_access(IO::M_READ);
75 throw bad_socket_state("not connected");
80 size_t ret = check_sys_error(::recv(priv->handle, buf, size, 0), "recv");
81 if(ret==0 && !eof_flag)
84 set_socket_events(S_NONE);
85 signal_end_of_file.emit();