コード例 #1
0
ファイル: tSocket_udp.cpp プロジェクト: Rhobota/librho
tSocket::tSocket(u16 port)
    : m_fd(kInvalidSocket)
{
    m_openSocket();
    m_bind(port);
}
コード例 #2
0
ファイル: tSocket_udp.cpp プロジェクト: Rhobota/librho
tSocket::tSocket(tAddr addr, u16 port)
    : m_fd(kInvalidSocket)
{
    m_openSocket();

    if (addr.getVersion() == kIPv4)
    {
        throw eRuntimeError("Cannot join IPv4 multicast group. Not supported!");

//      struct sockaddr_in* ip4sockAddr = (struct sockaddr_in*) addr.m_sockaddr;

//      struct ip_mreqn joinRequest;
//      memset(&joinRequest, 0, sizeof(joinRequest));
//      joinRequest.imr_multiaddr = ip4sockAddr->sin_addr;
//      joinRequest.imr_address.s_addr = INADDR_ANY;
//      joinRequest.imr_ifindex = 0;

//      if (::setsockopt(m_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &joinRequest, sizeof(joinRequest)) != 0)
//      {
//          m_finalize();
//          throw eRuntimeError("Cannot join ipv4 multicast group!");
//      }
    }

    else  // kIPv6
    {
        struct sockaddr_in6* ip6sockAddr = (struct sockaddr_in6*) addr.m_sockaddr;

        struct ipv6_mreq joinRequest;
        memset(&joinRequest, 0, sizeof(joinRequest));
        joinRequest.ipv6mr_multiaddr = ip6sockAddr->sin6_addr;
        joinRequest.ipv6mr_interface = 0;

        #if __linux__ || __APPLE__ || __CYGWIN__
        if (::setsockopt(m_fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &joinRequest, sizeof(joinRequest)) != 0)
        #elif __MINGW32__
        if (::setsockopt(m_fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, (char*)(&joinRequest), sizeof(joinRequest)) != 0)
        #else
        #error What platform are you on!?
        #endif
        {
            int err = errno;
            m_finalize();
            throw eRuntimeError(std::string("Cannot join ipv6 multicast group! Error: ") + strerror(err));
        }
    }

    int on  = 1;
    #if __linux__ || __APPLE__ || __CYGWIN__
    if (::setsockopt(m_fd, SOL_SOCKET, SO_REUSEADDR, (char*)&on, sizeof(on)) != 0)
    #elif __MINGW32__
    if (::setsockopt(m_fd, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, (char*)&on, sizeof(on)) != 0)
    #else
    #error What platform are you on!?
    #endif
    {
        m_finalize();
        throw eSocketCreationError("Cannot enable reuse-addr on udp multicast socket.");
    }

    m_bind(port);
}
コード例 #3
0
ファイル: WhereClause.hpp プロジェクト: chouquette/sqlite
 int bind( sqlite3_stmt* stmt, int index )
 {
     return m_bind(stmt, index);
 }