POCO库中文编程参考指南(3)Poco::Net::Socket

简介: POCO库中文编程参考指南(3)Poco::Net::Socket 作者:柳大·Poechant 博客:Blog.CSDN.net/Poechant 邮箱:zhongchao.ustc#gmail.

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();

-

from:Blog.CSDN.net/Poechant

目录
相关文章
|
1月前
|
C#
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
|
1月前
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
|
1月前
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
35 4
|
2月前
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
63 7
|
2月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
34 1
|
1月前
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
|
2月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
102 4
|
2月前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
70 8
|
2月前
|
存储 开发框架 .NET
.NET 8 实现无实体库表 API 部署服务
【10月更文挑战第12天】在.NET 8中,可通过以下步骤实现无实体库表的API部署:首先安装.NET 8 SDK及开发工具,并选用轻量级Web API框架如ASP.NET Core;接着创建新项目并设计API,利用内存数据结构模拟数据存储;最后配置项目设置并进行测试与部署。此方法适用于小型项目或临时解决方案,但对于大规模应用仍需考虑持久化存储以确保数据可靠性与可扩展性。
|
2月前
|
开发者 Windows
.NET 开源扁平化、美观的 C/S 控件库
【10月更文挑战第23天】介绍了三款适用于 .NET 平台的开源扁平化、美观的 C/S 控件库:MaterialSkin 采用 Google Material Design 风格,适合现代感界面;Krypton Toolkit 提供丰富控件,界面易于定制;Fluent Ribbon Control Suite 模仿 Office 界面,适合复杂功能应用。每款控件库均附有示例代码及 GitHub 链接。
108 0