首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

POCO 庫中 Socket 基類詳解:核心操作、選項與多路複用

     編輯:關於C++

Poco::Net::Socket:所有 Socket 類的基類

Socket 類封裝了跨平台的套接字核心操作,包括阻塞控制、超時設置、緩沖區管理、選項配置、地址獲取及 select/poll 多路複用。

1. 選擇模式枚舉

enum SelectMode {
    SELECT_READ  = 1,  // 可讀
    SELECT_WRITE = 2,  // 可寫
    SELECT_ERROR = 4   // 錯誤
};

2. 類型定義

typedef std::vector<Socket> SocketList;

3. 構造與賦值

  • Socket():未初始化的 Socket。
  • Socket(const Socket& socket):拷貝構造(引用計數)。
  • Socket& operator = (const Socket& socket):賦值運算符。

4. 比較運算符

支持 ==, !=, <, <=, >, >=,基於底層 SocketImpl 指針比較。

5. 核心 Socket 操作

  • int available() const:返回可讀數據字節數(非阻塞)。
  • void close():關閉 Socket。
  • bool poll(const Poco::Timespan& timeout, int mode) const:檢查 Socket 狀態,mode 為 SelectMode 組合。
  • SocketImpl* impl() const:獲取底層實現指針。
  • bool secure() const:是否為 SSL/TLS 連接。

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. 通用 Socket 選項 (setsockopt/getsockopt 封裝)

支持 int、unsigned、unsigned char、Timespan、IPAddress 等類型的值設置與獲取,level/option 對應系統常量。

9. 便捷選項方法

  • setLinger / getLinger、setNoDelay / getNoDelay (TCP_NODELAY)、setKeepAlive / getKeepAlive
  • setReuseAddress / getReuseAddress、setReusePort / getReusePort
  • setOOBInline / getOOBInline、setBlocking / getBlocking

10. 地址獲取

  • SocketAddress address() const:本地綁定地址。
  • SocketAddress peerAddress() const:對端地址。

11. 靜態多路複用 select

static int select(SocketList& readList,
                  SocketList& writeList,
                  SocketList& exceptList,
                  const Poco::Timespan& timeout);
// 返回就緒 Socket 總數,並修改三個列表僅保留就緒項。

12. 平台支持檢查

  • static bool supportsIPv4()
  • static bool supportsIPv6()

來自柳大的 CSDN 博客:Blog.CSDN.net/Poechant

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved