从Unix SOCK_STREAM套接字读取大量数据

|| 我是异步I / O的新手。 我需要从Unix SOCK_STREAM套接字读取大量数据。我正在使用非阻塞套接字。 它可能需要多个read / recv()。那部分对我来说很好。 我的疑问是 如果一次有3-4个客户端向我的服务器套接字写入大量数据,则说每个客户端正在写入100K数据。 可能是这样的情况:我的第一次读取是从client1读取某些数据(例如40 K),第二次读取是从client 2读取数据,而第三次读取又是从client1读取剩余数据? 问候 DJ     
已邀请:
        问题的答案很大程度上取决于如何将client1定义为clientN。具体来说,它们如何形成与服务器的连接。 SOCK_STREAM是面向连接的。这意味着您的服务器创建一个监听套接字,并绑定到该套接字,然后在客户端连接时,服务器接受连接并从本质上获得一个新的套接字。 现在,如果client1到clientN各自进行单独的连接,则服务器将基本上具有N个不同的套接字,在这种情况下,您的问题的答案为否-来自不同客户端的数据不会混合,因为它们是在不同的套接字上传输的。 但是,如果您的安排是这样的:您有一个打开连接的父客户端,并且该套接字由client1共享给n(例如在不同的线程或子进程中),那么答案是肯定的-在特定套接字上写入不是原子的,数据可以混合。 附带说明一下,如果您使用Unix管道而不是Unix域套接字,则即使在同一管道上使用不同的编写器达到一定的阈值(根据POSIX,Linux至少为512),您也将获得原子写的好处。支持65000字节)     

要回复问题请先登录注册