【问题标题】:Poco::StreamSocket: detect sending failPoco::StreamSocket:检测发送失败
【发布时间】:2017-09-05 12:27:03
【问题描述】:

假设我有一个消息队列,例如std::deque<std::vector<uint8_t>>() 我做了一个poll()(或选择),并且知道套接字已准备好写入。

我愿意:

const auto& message = _messageQueue.front();
_socket.sendBytes(message.data(), message.size());
_messageQueue.pop_front();

例如,我可以断言发送的字节数与消息大小相同,但 Poco 文档说 StreamSocket::sendBytes()

Returns the number of bytes sent, which may be less than the number of bytes specified.

Poco 文档也没有说明 setBlocking() 方法的实际作用。它会阻塞直到收到 ACK 数据包,并抛出套接字错误?

【问题讨论】:

标签: c++ sockets poco-libraries


【解决方案1】:

例如,我可以断言发送的字节数与消息大小相同,但 Poco 文档说 StreamSocket::sendBytes()

返回发送的字节数,可能小于指定的字节数。

这仅在非阻塞模式下是正确的。在阻塞模式下,它将在返回之前传输所有字节,除非出现错误。这是由 Posix 定义的,而不是由 Poco 定义的。如果这里有实际问题,我看不到。

Poco 文档也没有说明 setBlocking() 方法的实际作用。在收到 ACK 数据包之前它会阻塞吗?

没有。它导致未来的读取阻塞,直到有数据或 EOS 或错误,并写入阻塞,直到数据被复制到套接字发送缓冲区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2022-08-20
    • 2020-07-28
    相关资源
    最近更新 更多