3 This file is part of libmspnet
4 Copyright © 2008 Mikkosoft Productions, Mikko Rasa
5 Distributed under the LGPL
9 #include <msp/strings/formatter.h>
10 #include "datagramsocket.h"
15 DatagramSocket::DatagramSocket(Family f, int p):
16 Socket(f, SOCK_DGRAM, p)
19 int DatagramSocket::connect(const SockAddr &addr)
24 socklen_t size=addr.fill_sockaddr(sa);
26 int err=::connect(handle, &sa, size);
28 throw SystemError("Unable to connect", errno);
31 peer_addr=addr.copy();
34 size=sizeof(sockaddr);
35 getsockname(handle, &sa, &size);
36 local_addr=SockAddr::create(sa);
43 unsigned DatagramSocket::sendto(const char *buf, unsigned size, const SockAddr &addr_)
51 socklen_t addr_len=addr_.fill_sockaddr(addr);
53 int ret=::sendto(handle, buf, size, 0, &addr, addr_len);
59 throw SystemError("Sendto failed", errno);
65 unsigned DatagramSocket::recvfrom(char *buf, unsigned size, SockAddr *&addr_)
73 socklen_t addr_len=sizeof(sockaddr);
75 int ret=::recvfrom(handle, buf, size, 0, &addr, &addr_len);
81 throw SystemError("Recvfrom failed", errno);
84 addr_=SockAddr::create(addr);
89 IO::PollEvent DatagramSocket::get_initial_events() const