2013-12-18 41 views
1

请假设我们可以区分不同TCP连接的数据包,如果是这样,那么我们能否在服务器端的唯一套接字上接受多个TCP连接?我知道服务器绑定在一个套接字上,并且在接受新连接时为新连接分配一个新套接字。我会覆盖ACCEPT systemcall?在服务器上的唯一一个套接字上处理多个TCP连接

+0

所以,你想在服务器*一个*套接字接收来自所有连接的所有数据?就像为UDP做的一样?然后,在TCP中不可能,因为它是一个连接的协议,每个连接都是一个独立的实体。 –

+0

为什么?你提到的所有东西都已经由TCP完成了,并且每个接受的连接都以独立套接字的形式完成。你为什么认为你需要重新创建API? – EJP

+0

@ EJP。认为我想用最小的延迟处理很多连接,所以最好是通过一个套接字来处理所有连接,而不是为每个连接创建一个套接字,但ACCEPT systemcall为每个接受的连接返回单独的套接字。正因为如此,我认为我应该重写ACCEPT systemcall! – MSH

回答

0

请假设,我们可以互相

区分不同的TCP连接的数据包你不能假设的。通过TCP连接应用程序不可见“数据包”。 TCP连接提供了一个字节流。你不能保证你读的下一个东西会是一个消息头,告诉你消息来自哪个客户端。

+0

数据包边界不可见,但addr,port信息是。没有理由TCP套接字不能像UDP套接字一样工作,从而提供“来自addr,port的下n个字节”,其中n是任意的(与UDP不同)。 – user1055568

+0

@ user1055568'addr.port'信息'通过TCP连接对应用程序不可见,而不是通过'getpeername()',它适用于套接字以及整个连接。我不知道你在说什么。 – EJP

+0

我只是说这是伯克利套接字API的设计方式,与TCP协议是否定义应用程序级数据包边界无关。 – user1055568

相关问题