假设我有一个消息队列,例如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数据包之前阻塞,并抛出套接字错误?
答案 0 :(得分:0)
示例,我可以断言发送的字节与消息大小相同,但Poco文档说明
StreamSocket::sendBytes()
返回发送的字节数,可能小于指定的字节数。
这仅在非阻塞模式下正确。在阻塞模式下,除非出现错误,否则我将在返回之前传输所有字节。这是由Posix定义的,而不是由Poco定义的。如果这里有实际问题,我看不到它。
Poco文档也没有说明实际上
setBlocking()
方法的作用。在收到ACK数据包之前它会阻塞吗?
没有。 导致将来的读取阻塞,直到有数据或EOS或错误,并写入blockuntil数据已被复制到套接字发送缓冲区。