【发布时间】:2018-08-29 12:43:14
【问题描述】:
【问题讨论】:
标签: windows networking tcp udp netstat
【问题讨论】:
标签: windows networking tcp udp netstat
这意味着您有多个套接字在同一个端口上侦听。这并不少见。
使用SO_REUSEADDR 选项,多个线程或进程可以共享一个监听端口。
这通常用作应用程序扩展 UDP 服务以使用多个线程或 CPU 内核的一种简单方法。让我们想象一个服务在 UDP 端口 3702 上侦听。假设对于每个传入的数据包,必须完成一些长时间的阻塞 I/O 操作。如果服务器应用程序是单线程的,它一次只能处理 1 个数据包。
因此,服务器创建了 4 个线程(或 4 个进程)。每个线程创建套接字,在套接字上设置 SO_REUSEADDR 选项,绑定到端口 3702,并开始侦听 (recvfrom) 传入数据包。当传入的数据包到达时,被recvfrom 调用阻塞的线程之一将被唤醒并有一个数据包要处理。当该线程正在处理数据包时,其他线程也能够并行接收数据包。
【讨论】:
recvfrom 也适用于 TCP?
accept 而不是 recvfrom 上被阻止)。它是一种用于扩展的不同线程模型,并且使用了 epoll 或 IOCP 等其他工具。