c# - 如何以编程方式 "unbind"套接字?

标签 c# sockets shutdown ports unbind

1) 在进程结束之前,套接字似乎没有从 LocalEndPoint 解除绑定(bind)。
2) 我已经尝试了另一个问题的解决方案,也试过等待一分钟 - 无济于事。
3) 目前我已经尝试了以下方法来摆脱套接字及其连接:

public static void killUser(User victim)  
    {  
        LingerOption lo = new LingerOption(false, 0);  
victim.connectedSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.Linger,     lo);  
        victim.connectedSocket.Shutdown(SocketShutdown.Both);  
        victim.connectedSocket.Disconnect(true);  
        victim.connectedSocket.Close();  
        clients.RemoveAt(victim.ID);  
    }  

4) 经过一番谷歌搜索后,我似乎无法取消绑定(bind)端口,因此如果我有足够数量的连接客户端,我最终会用完端口来监听。

最佳答案

我怀疑您将已连接客户端的套接字与服务器套接字混淆了。

您的服务器套接字是在特定端口上监听传入连接的套接字。您在该函数中关闭的套接字是您通往(可能很多)远程连接之一的管道。

要“解除端口绑定(bind)”,您需要关闭/关闭服务器 套接字。

更新以消除一些困惑

您应该有一个“服务器”套接字,您可以在该套接字上调用 .Bind(EndPoint),然后调用 .Listen()。这是您要关闭/关闭以“解除绑定(bind)”并释放一个端口供以后使用的套接字。

然后,当您的“服务器”套接字接受新连接时,您将获得多个“客户端”套接字的引用。这些都可以毫无问题地绑定(bind)到同一个端口。要关闭其中一个连接并断开您的客户端,请执行您现在正在执行的操作。您实际上可以将方法缩减为:

  • 关机
  • 关闭
  • 从您的列表中删除

断开连接,其余的都是不必要的。

关于c# - 如何以编程方式 "unbind"套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4623045/

相关文章:

c# - 在 WPF 中使用 Unity Prism 在 TextBox 中键入时实时更新 TextBlock

c# - 如何从 C# 中的封闭构造类中获取基类对象

node.js - Node Net.Socket 字符编码问题

c# - 如何关闭计算机?

C# - 计算作为对象 - 具有许多依赖关系的许多计算

c# - 如何根据数组中的值对对象列表进行排序?

Linux 上的经典 BPF : filter does not work

python - 使用 Scapy 嗅探并发送 UDP 流量

C:连接程序并关闭

linux - 如何在 linux 中将 Perl 脚本作为系统守护进程运行?