如何强制部分写入来测试网络服务器

时间:2012-09-27 17:11:39

标签: c sockets tcp

我使用非阻塞套接字编写了一个事件驱动的服务器(请求响应协议 - HTTP之类)。我通过编写一个客户端来测试部分读取,该客户端在每隔几秒钟后以离散块的形式发送请求。 如何测试部分写入,即我需要写入100个字节,然后发送只写入10个字节的调用返回。

我正在写基于perl的客户。这是通过SSL,但出于这个问题的目的,我可以部分写入TCP。

3 个答案:

答案 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。