5

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

我正在编写基于 perl 的客户端。这是通过 SSL 进行的,但就这个问题而言,我可以在 TCP 上进行部分写入。

4

3 回答 3

2

尝试减小输出缓冲区的大小:

 err = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, 1)

这应该使发送输出仅是缓冲区的一部分。

于 2012-09-27T18:47:48.683 回答
0

使用 TCP 流控制 - 让您的客户端非常缓慢地从套接字读取,因此发送方(服务器)套接字发送缓冲区会填满数据。

于 2012-09-27T17:51:12.010 回答
0

非常快速地写入大量数据。

使输出缓冲区非常小(如 Jan 所建议的)

或者

创建自己的发送函数

例如

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 字节,否则它将始终发送 100 字节短。否则,如果可以的话,它会发送你给它的东西。一旦您确认您的部分发送处理工作正常,将调用 mysend 更改回普通发送并从您的 hackary 代码中删除 mysend。

于 2013-01-18T01:22:13.373 回答