我使用非阻塞套接字编写了一个事件驱动的服务器(请求响应协议 - HTTP之类)。我通过编写一个客户端来测试部分读取,该客户端在每隔几秒钟后以离散块的形式发送请求。 如何测试部分写入,即我需要写入100个字节,然后发送只写入10个字节的调用返回。
我正在写基于perl的客户。这是通过SSL,但出于这个问题的目的,我可以部分写入TCP。
答案 0 :(得分:2)
尝试减小输出缓冲区的大小:
err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1)
这应该使发送输出只是缓冲区的一部分。
答案 1 :(得分:0)
使用TCP流控制 - 使客户端从套接字中读取非常慢,因此发送方(服务器)套接字发送缓冲区填满了数据。
答案 2 :(得分:0)
非常快速地写下大量数据。
使输出缓冲区非常小(如Jan所示)
或
创建自己的发送功能
e.g。
ssize_t mysend(int sockfd, const void *buf, size_t len, int flags)
{
int shortlen = len - 100 > 0 ? len - 100; len
return send(sockfd, buf, shortlen, flags);
}
除了发送< 100个字节。否则它会发送你给它的东西,如果可以的话。一旦您确认部分发送处理工作正常,请将对mysend的调用更改回普通发送并从您的hackary代码中删除mysend。