gpt4 book ai didi

c++ - 线程中 TCP 套接字的奇怪行为

转载 作者:行者123 更新时间:2023-11-28 07:52:59 27 4
gpt4 key购买 nike

我们有一个应用程序,我们通过 TCP 套接字发送数据。我们为此使用 8 个 TCP 连接。套接字发送和接收在后台线程中调用。只有一个线程遍历套接字数组以通过所有套接字发送数据(顺序)。

发送线程中的代码是这样的:

for(i = 0; i < 8; i++) {

nBytesWrriten = send (tcpsock[i], data2, nleft, 0))
//error handling and process more data

}

接收线程是这样的:

for(i = 0; i < 8; i++) {

sz[i] = recv (tcpsock[i], data, MAX_UDT_SIZE, 0);
//process data
}

一切正常,数据已传输,但有时花费的时间太长。在检查日志时,我发现在大多数情况下,发件人线程工作正常,但有时,在“发送”调用之前和之后的时间戳(有时超过一秒)会有很大的延迟。

所有发送和接收操作都发生在工作线程中。这与发送调用之前/发送调用时线程的抢占有关吗?我可以避免在发送调用之前抢占线程吗?还是接收线程在准备发送更多数据时尚未接收到套接字上的数据,因此导致延迟?

由于发送数据花费的时间太长,我该如何优化它?

谢谢

最佳答案

您应该使用非阻塞套接字进行发送。可能发生的情况是一个(或多个)无法立即发送,因此它会等待直到可以发送一些数据,可能是缓冲区已满或其他原因。

使用非阻塞套接字不会停止,但您必须检查数据是否未发送到某些套接字,稍后再试。

关于c++ - 线程中 TCP 套接字的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com