gpt4 book ai didi

c# - 何时使用 TcpClient.ReceiveTimeout 与 NetworkStream.ReadTimeout?

转载 作者:可可西里 更新时间:2023-11-01 02:30:40 28 4
gpt4 key购买 nike

在编写 TCP 服务器时,我想设置读取客户端请求的超时时间:

var tcpClient = tcpListener.AcceptTcpClient();
var networkStream = tcpListener.GetStream();

tcpClient.ReceiveTimeout = 10000;
networkStream.ReadTimeout = 10000;

请看最后两行。我应该更喜欢哪一个?它们在有效性方面是否相同或有何不同?

最佳答案

Which one should I prefer?

前者和后者都会将它们内部的Socket设置为接收超时。同一个套接字将从 TcpClient 冒泡到创建的 NetworkStream,所以我选择前者

Are they equal in terms of effectivity or in which way to they differ?

我们可以查看 source code 是件好事.这是 TcpClient.ReceiveTimeout :

public int ReceiveTimeout 
{
get
{
return numericOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
}
set
{
Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, value);
}
}

设置底层客户端套接字的接收超时(ClientSocket 类型)。然后传递给NetworkStream:

public NetworkStream GetStream() 
{
// Shortened for brevity
if (m_DataStream==null)
{
m_DataStream = new NetworkStream(Client, true);
}
return m_DataStream;
}

NetworkStream 查找超时时,它会在 Socket 中查找:

public override int ReadTimeout 
{
get
{
int timeout = (int)m_StreamSocket.GetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
if (timeout == 0)
{
return -1;
}
}
return timeout;
}

关于c# - 何时使用 TcpClient.ReceiveTimeout 与 NetworkStream.ReadTimeout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30390665/

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