CLX C++ Libraries - udp::socket
Author: clown

CLX C++ Libraries
Home >> udp::socket

# Declaration

    namespace udp {
        template <int Family>
        class basic_socket : basic_rawsocket<SOCK_DGRAM, Family, 0>;

        typedef basic_socket<AF_INET> socket;
        typedef basic_sockaddress<AF_INET, IPPROTO_UDP> sockaddress;
        typedef basic_sockbuf<socket> sockbuf;
        typedef basic_sockstream<socket> sockstream;
        typedef basic_sockmanager<SOCK_DGRAM, AF_INET, 0> sockmanager;
    };

# Overview

udp::socket は，UDP 用ソケットのラッパクラスです．UDP によるデータ通信においても， sockstream を利用することができます．UDP ソケットを用いたときは，以下のような動作を行います．

- 送信側の場合は，udp::socket（または，直接 udp::sockstream）オブジェクトを生成する際に指定した IP アドレス，ポート番号に対して通信を行います．
- 受信側の場合は，from() メソッドで返されるアドレスに対して通信を行います． from() メソッドで返されるアドレスの領域は，データを受信する度に更新されていきます． すなわち，受信側が sockstream を用いてデータ通信を行う場合， 受信側は直近にデータを受信した相手に対してデータ送信を行います．from() メソッドで返されるアドレス領域に無効な値が設定されている場合は通信に失敗します．

# Example

## Sender

example_udp_send.cpp

    #include <iostream>
    #include <string>
    #include "clx/udp.h"

    int main(int argc, char* argv[]) {
        if (argc < 3) std::exit(-1);
        clx::udp::sockstream s(argv[1], clx::udp::port(argv[2]));

        std::string buf;
        while (std::getline(std::cin, buf)) {
            s << buf << std::endl;
        }

        return 0;
    }

## Receiver

example_udp_recv.cpp

    #include <iostream>
    #include <string>
    #include "clx/udp.h"

    int main(int argc, char* argv[]) {
        if (argc < 2) std::exit(-1);
        clx::udp::sockstream ss(clx::udp::port(argv[1]));

        std::string buf;
        while (std::getline(ss, buf)) {
            std::cout << buf << " (from " << ss.from().ipaddr()
                << ':' << ss.from().port() << ')' << std::endl;
        }

        return 0;
    }

# Template Parameters

Family
  プロトコルファミリーを指定します．

# Related Types

    typedef basic_rawsocket<SOCK_DGRAM, Family, 0> rawsocket;
    typedef basic_sockaddress<Family, IPPROTO_UDP> sockaddress;
    typedef char char_type;
    typedef std::basic_string<char_type> string_type;

# Construction and Member Functions

    basic_socket();
    basic_socket(const basic_socket& cp);
    explicit basic_socket(socket_int s, const sockaddress& addr);
    explicit basic_socket(const char_type* host, int port);
    explicit basic_socket(const string_type& host, int port);
    explicit basic_socket(int port);
    virtual ~basic_socket();

    int bind(int port);
    bool is_bind() const;

    int send_to(const char_type* src, const int n, sockaddress& addr);
    int send_to(const string_type& src, const sockaddress& addr);
    int send_to(const char_type* src, int n, const char_type* host, int port);
    int send_to(const string_type& src, const string_type& host, int port);
    int send(const char_type* src, int n);
    int send(const string_type& src);
    int recv(char_type* dest, int n);

    const sockaddress& from() const;
    const sockaddress& to() const;