Пример #1
0
void TCPSocket::listen(int backlog) 
{
    TraceLS(this) << "Listening" << endl;
    init();
    int r = uv_listen(ptr<uv_stream_t>(), backlog, internal::onAcceptConnection);
    if (r) setAndThrowError("TCP listen failed", r);
}
Пример #2
0
void TCPSocket::connect(const net::Address& peerAddress) 
{
    TraceLS(this) << "Connecting to " << peerAddress << endl;
    init();
    auto req = new uv_connect_t;
    req->data = this;
    int r = uv_tcp_connect(req, ptr<uv_tcp_t>(), peerAddress.addr(), internal::onConnect);
    if (r) setAndThrowError("TCP connect failed", r);
}
Пример #3
0
bool UDPSocket::recvStart() 
{
    // UV_EALREADY means that the socket is already bound but that's okay
    // TODO: No need for boolean value as this method can throw exceptions
    // since it is called internally by bind().
    int r = uv_udp_recv_start(ptr<uv_udp_t>(), UDPSocket::allocRecvBuffer, onRecv);
    if (r && r != UV_EALREADY) {
        setAndThrowError("Cannot start recv on invalid UDP socket", r);
        return false;
    }  
    return true;
}
Пример #4
0
void TCPSocket::bind(const net::Address& address, unsigned flags) 
{
    TraceLS(this) << "Binding on " << address << endl;
    init();
    int r;
    switch (address.af()) {
    case AF_INET:
        r = uv_tcp_bind(ptr<uv_tcp_t>(), address.addr(), flags);
        break;
    //case AF_INET6:
    //    r = uv_tcp_bind6(ptr<uv_tcp_t>(), *reinterpret_cast<const sockaddr_in6*>(address.addr()));
    //    break;
    default:
        throw std::runtime_error("Unexpected address family");
    }
    if (r) setAndThrowError("TCP bind failed", r);
}
Пример #5
0
void UDPSocket::bind(const Address& address, unsigned flags) 
{    
    TraceS(this) << "Binding on " << address << endl;

    int r;
    switch (address.af()) {
    case AF_INET:
        r = uv_udp_bind(ptr<uv_udp_t>(), address.addr(), flags);
        break;
    //case AF_INET6:
    //    r = uv_udp_bind6(ptr<uv_udp_t>(), address.addr(), flags);
    //    break;
    default:
        throw std::runtime_error("Unexpected address family");
    }

    // Throw and exception of error
    if (r)
        setAndThrowError("Cannot bind UDP socket", r); 
    
    // Open the receiver channel
    recvStart();
}