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 WSAEventSelect(handle, event, FD_READ|FD_CLOSE);
21 set_events(IO::P_INPUT);
24 int DatagramSocket::connect(const SockAddr &addr)
29 socklen_t size=addr.fill_sockaddr(sa);
31 int err=::connect(handle, &sa, size);
33 throw SystemError("Unable to connect", errno);
36 peer_addr=addr.copy();
39 size=sizeof(sockaddr);
40 getsockname(handle, &sa, &size);
41 local_addr=SockAddr::create(sa);
48 unsigned DatagramSocket::sendto(const char *buf, unsigned size, const SockAddr &addr_)
56 socklen_t addr_len=addr_.fill_sockaddr(addr);
58 int ret=::sendto(handle, buf, size, 0, &addr, addr_len);
64 throw SystemError("Sendto failed", errno);
70 unsigned DatagramSocket::recvfrom(char *buf, unsigned size, SockAddr *&addr_)
78 socklen_t addr_len=sizeof(sockaddr);
80 int ret=::recvfrom(handle, buf, size, 0, &addr, &addr_len);
86 throw SystemError("Recvfrom failed", errno);
89 addr_=SockAddr::create(addr);