首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POSIX套接字:接受使用不同传输协议的连接?

POSIX套接字:接受使用不同传输协议的连接?
EN

Stack Overflow用户
提问于 2013-12-03 03:20:42
回答 1查看 152关注 0票数 0

我想知道,就接受N个不同连接所需的监听端口/服务器套接字数量而言,所需的最小开销是多少,每个连接都使用在IP之上运行的不同传输协议,例如TCP、SCTP、DCCP、UDP等。

当然,一种直接的方法是拥有N个独立的服务器套接字(每个套接字都是通过使用适当的protocol参数调用socket()创建的),每个套接字监听一个唯一的端口。但是,在同时使用多个协议的应用程序中实现此方法将非常不方便,因为客户端需要知道多个服务器端口。此外,在对每个协议只对等一次的对等应用程序中(使用相同的客户端),N个服务器套接字中的每个都只接受单个(客户端)连接的事实看起来像是一个巨大的开销(引入N个额外的套接字纯粹是为了处理到单个对等客户端的N个“真实”连接)。

是否有可能做得更好,例如,通过减少侦听服务器套接字的数量和/或侦听相同的端口?

(为了简单起见,您可以假设N=2,一个连接是TCP,另一个是DCCP或UDP (请不要假设无连接通信,因为DCCP是面向连接的)。)

编辑:我对N个(客户端)连接不感兴趣,这些连接的文件描述符是由N个对accept的调用返回的。问题是使这N个连接成为可能的额外开销(即,必须至少有一个额外的服务器套接字来侦听传入的连接)。

EN

回答 1

Stack Overflow用户

发布于 2014-11-05 21:44:04

总结上面的评论:因为在

代码语言:javascript
复制
int socket(int domain, int type, int protocol)

调用我们必须指定protocol,我们不能将一个套接字用于多个协议。我们也不能随身携带

代码语言:javascript
复制
socket(AF_INET, SOCK_RAW, 0);

参见SOCK_RAW Demystified

关于将同一端口与不同的插座一起使用:这种可能性因系统而异;例如,请参阅HP-UX (man 7f inet):

代码语言:javascript
复制
  The local port address is selected from independent domains for TCP
  and UDP sockets.  This means that creating a TCP socket and binding it
  to local port number 10000, for example, does not interfere with
  creating a UDP socket and also binding it to local port number 10000
  at the same time.

vs. Linux (man ip):

代码语言:javascript
复制
  Only one IP socket may be bound to any given local (address, port) pair.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20336114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档