POCO庫中文程式設計參考指南(3)Poco::Net::Socket

鍾超發表於2012-04-15

POCO庫中文程式設計參考指南(3)Poco::Net::Socket

  • 作者:柳大·Poechant
  • 部落格:Blog.CSDN.net/Poechant
  • 郵箱:zhongchao.ustc#gmail.com (# -> @)
  • 日期:April 14th, 2012

1 SelectMode

enum SelectMode
    /// The mode argument to poll() and select().
{
    SELECT_READ  = 1,
    SELECT_WRITE = 2,
    SELECT_ERROR = 4
};

2 SocketList

typedef std::vector<Socket> SocketList;

3 建構函式

未初始化的 socket:

Socket();

拷貝建構函式

Socket(const Socket& socket);

4 過載運算子

賦值運算子:

Socket& operator = (const Socket& socket);

比較運算子:

bool operator == (const Socket& socket) const;
bool operator != (const Socket& socket) const;
bool operator <  (const Socket& socket) const;
bool operator <= (const Socket& socket) const;
bool operator >  (const Socket& socket) const;
bool operator >= (const Socket& socket) const;

5 常用 socket 操作

返回該 socket 的可讀資料的位元組數,該操作不引起 socket 阻塞:

int available() const;

關閉 socket:

void close();

poll:

bool poll(const Poco::Timespan& timeout, int mode) const;
    /// Determines the status of the socket, using a 
    /// call to select().
    /// 
    /// The mode argument is constructed by combining the values
    /// of the SelectMode enumeration.
    ///
    /// Returns true if the next operation corresponding to
    /// mode will not block, false otherwise.

SocketImpl* impl() const;
    /// Returns the SocketImpl for this socket.

檢查這個 socket 的連線是否是安全的(使用 SSL 或 TLS):

bool secure() const;

6 緩衝區

傳送資料的緩衝區:

void setSendBufferSize(int size);
int getSendBufferSize() const;

接收資料的緩衝區:

void setReceiveBufferSize(int size);
int getReceiveBufferSize() const;

7 超時時間

傳送資料的超時時間:

void setSendTimeout(const Poco::Timespan& timeout);
Poco::Timespan getSendTimeout() const;

接收資料的超時時間:

void setReceiveTimeout(const Poco::Timespan& timeout);
Poco::Timespan getReceiveTimeout() const;

8 其他介面

void setOption(int level, int option, int value);
void setOption(int level, int option, unsigned value);
void setOption(int level, int option, unsigned char value);
void setOption(int level, int option, const Poco::Timespan& value);
void setOption(int level, int option, const IPAddress& value);

void getOption(int level, int option, int& value) const;
void getOption(int level, int option, unsigned& value) const;
void getOption(int level, int option, unsigned char& value) const;
void getOption(int level, int option, Poco::Timespan& value) const;
void getOption(int level, int option, IPAddress& value) const;

void setLinger(bool on, int seconds);
void getLinger(bool& on, int& seconds) const;

void setNoDelay(bool flag);
bool getNoDelay() const;

void setKeepAlive(bool flag);
bool getKeepAlive() const;

void setReuseAddress(bool flag);
bool getReuseAddress() const;

void setReusePort(bool flag);
bool getReusePort() const;

void setOOBInline(bool flag);
bool getOOBInline() const;

void setBlocking(bool flag);
bool getBlocking() const;

獲取 socket 的 IP 和埠:

SocketAddress address() const;

獲取 peer socket 的 IP 地址和埠:

SocketAddress peerAddress() const;

9 靜態函式

select:

static int select(SocketList& readList,
                  SocketList& writeList, 
                  SocketList& exceptList, 
                  const Poco::Timespan& timeout);

    /// Determines the status of one or more sockets, 
    /// using a call to select().
    ///
    /// ReadList contains the list of sockets which should be
    /// checked for readability.
    ///
    /// WriteList contains the list of sockets which should be
    /// checked for writeability.
    ///
    /// ExceptList contains a list of sockets which should be
    /// checked for a pending error.
    ///
    /// Returns the number of sockets ready.
    ///
    /// After return, 
    ///   * readList contains those sockets ready for reading,
    ///   * writeList contains those sockets ready for writing,
    ///   * exceptList contains those sockets with a pending error.
    ///
    /// If the total number of sockets passed in readList, writeList and
    /// exceptList is zero, select() will return immediately and the
    /// return value will be 0.
    ///
    /// If one of the sockets passed to select() is closed while
    /// select() runs, select will return immediately. However,
    /// the closed socket will not be included in any list.
    /// In this case, the return value may be greater than the sum
    /// of all sockets in all list.

檢查是否支援 IPv4 或 IPv6:

static bool supportsIPv4();
static bool supportsIPv6();

-

轉載請註明來自柳大的CSDN部落格:Blog.CSDN.net/Poechant

-

相關文章