Poco :: StreamSocket:检测发送失败

问题描述:

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

我做的:

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

例如,我可以做到这一点字节发送的断言是一样的消息大小,但波索单证说StreamSocket :: sendBytes()

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

Poco文档也没有说什么实际上setBlocking()方法。它是否阻塞,直到收到ACK数据包,并引发套接字错误?

+0

请阅读此处:[阻止vs非阻塞套接字](http://www.scottklement.com/rpg/socktut/nonblocking.html)。 –

例如,我可以做到这一点发送字节是一样的消息大小的断言,但波索单证说StreamSocket::sendBytes()

返回发送的字节数,其可以是小于的数量指定的字节。

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

Poco文档也没有说什么实际上setBlocking()方法。在接收到ACK数据包之前它是否阻塞?

号它导致将来读取要阻塞,直到有数据或EOS或错误,并写入blockuntil复制到套接字发送缓冲器中的数据hasbeen。