Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在一个套接字上同时recv()和send()安全吗?_Sockets_Send_Concurrency_Recv - Fatal编程技术网

Sockets 在一个套接字上同时recv()和send()安全吗?

Sockets 在一个套接字上同时recv()和send()安全吗?,sockets,send,concurrency,recv,Sockets,Send,Concurrency,Recv,我记得在什么地方读到过,一个套接字可以被看作是两个独立的半双工信道。这是否意味着同一套接字的recv()和send()实际上是不相关的 如果是的话,这是定义上的还是事实上的 具体实施 如果没有,两者如何相互干扰 谢谢。我很好奇你认为他们会互相干扰。您是否认为您可能会收到您发送的内容?对于SOCK\u流,您可以同时使用send/recv 例: 假设您有两个线程,其中一个负责发送数据 第二个负责接收您可以执行以下操作的数据 主要程序: 找一个插座。 创建一个POSIX线程,用于将缓冲区发送到此f

我记得在什么地方读到过,一个套接字可以被看作是两个独立的半双工信道。这是否意味着同一套接字的
recv()
send()
实际上是不相关的

  • 如果是的话,这是定义上的还是事实上的 具体实施
  • 如果没有,两者如何相互干扰

谢谢。

我很好奇你认为他们会互相干扰。您是否认为您可能会收到您发送的内容?

对于SOCK\u流,您可以同时使用send/recv

例: 假设您有两个线程,其中一个负责发送数据 第二个负责接收您可以执行以下操作的数据

主要程序: 找一个插座。 创建一个POSIX线程,用于将缓冲区发送到此fd。 创建一个POSIX线程来接收从该fd到达的数据。 连接到服务器

线程1例程: 构造消息缓冲区; 将缓冲区发送到此fd

线程2例程: 从该fd接收数据。
处理日期。

不,我的意思是一方如何影响另一方行为的正确性或效率,如果他们这样做的话。例如,如果它们共享同一个缓冲区,很可能一个必须等到另一个空闲,对吗?您可以发出阻塞或非阻塞发送和接收。使用阻塞时,传入的数据缓冲区就是数据缓冲区。没有混淆的可能。使用非阻塞时,将复制数据缓冲区。API文档中没有关于交错使用的限制,因此它们必须使用不同的缓冲区;因为如果它们不是,它们就不可能是非阻塞的(它们必须相互阻塞)。这取决于协议。TCP是全双工的,所以是的。谢谢,你有什么反例吗?或任何其他参考链接/代码,以便我阅读?