Poco :: StreamSocket:检测发送失败

时间:2017-09-05 12:27:03

标签: c++ sockets poco-libraries

假设我有一个消息队列,例如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数据包之前阻塞,并抛出套接字错误?

1 个答案:

答案 0 :(得分:0)

  

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

     
    

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

  

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

  

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

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

相关问题