X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fnet%2Fdatagramsocket.cpp;h=54935545bbf984629602498c6d162d0e7170f75b;hb=HEAD;hp=d24ca4e1ec8ec1c10fcd11c3188da874426b053b;hpb=debe1004676d5431e571d9c4361072661dcc88c4;p=libs%2Fnet.git diff --git a/source/net/datagramsocket.cpp b/source/net/datagramsocket.cpp index d24ca4e..5493554 100644 --- a/source/net/datagramsocket.cpp +++ b/source/net/datagramsocket.cpp @@ -1,8 +1,8 @@ -#include +#include "platform_api.h" +#include "datagramsocket.h" #include #include #include -#include "datagramsocket.h" #include "sockaddr_private.h" #include "socket_private.h" @@ -12,85 +12,41 @@ namespace Net { DatagramSocket::DatagramSocket(Family f, int p): ClientSocket(f, SOCK_DGRAM, p) { -#ifdef WIN32 - WSAEventSelect(priv->handle, *priv->event, FD_READ|FD_CLOSE); -#endif - set_events(IO::P_INPUT); + set_socket_events(S_INPUT); } bool DatagramSocket::connect(const SockAddr &addr) { SockAddr::SysAddr sa = addr.to_sys(); + check_sys_connect_error(::connect(priv->handle, reinterpret_cast(&sa.addr), sa.size)); - int err = ::connect(priv->handle, reinterpret_cast(&sa.addr), sa.size); - if(err==-1) - { -#ifdef WIN32 - throw system_error("connect", WSAGetLastError()); -#else - throw system_error("connect"); -#endif - } + peer_addr.reset(addr.copy()); - delete peer_addr; - peer_addr = addr.copy(); - - delete local_addr; SockAddr::SysAddr lsa; getsockname(priv->handle, reinterpret_cast(&lsa.addr), &lsa.size); - local_addr = SockAddr::new_from_sys(lsa); + local_addr.reset(SockAddr::new_from_sys(lsa)); connected = true; return true; } -unsigned DatagramSocket::sendto(const char *buf, unsigned size, const SockAddr &addr) +size_t DatagramSocket::sendto(const char *buf, size_t size, const SockAddr &addr) { if(size==0) return 0; SockAddr::SysAddr sa = addr.to_sys(); - - int ret = ::sendto(priv->handle, buf, size, 0, reinterpret_cast(&sa.addr), sa.size); - if(ret<0) - { - if(errno==EAGAIN) - return 0; - else - { -#ifdef WIN32 - throw system_error("sendto", WSAGetLastError()); -#else - throw system_error("sendto"); -#endif - } - } - - return ret; + return check_sys_error(::sendto(priv->handle, buf, size, 0, reinterpret_cast(&sa.addr), sa.size), "sendto"); } -unsigned DatagramSocket::recvfrom(char *buf, unsigned size, SockAddr *&from_addr) +size_t DatagramSocket::recvfrom(char *buf, size_t size, SockAddr *&from_addr) { if(size==0) return 0; SockAddr::SysAddr sa; - int ret = ::recvfrom(priv->handle, buf, size, 0, reinterpret_cast(&sa.addr), &sa.size); - if(ret<0) - { - if(errno==EAGAIN) - return 0; - else - { -#ifdef WIN32 - throw system_error("recvfrom", WSAGetLastError()); -#else - throw system_error("recvfrom"); -#endif - } - } - + size_t ret = check_sys_error(::recvfrom(priv->handle, buf, size, 0, reinterpret_cast(&sa.addr), &sa.size), "recvfrom"); from_addr = SockAddr::new_from_sys(sa); return ret;