在一个套接字上同时使用 receive() 和 send() 是否安全?
我记得在某处读过,套接字可以被视为两个独立的半双工通道。这是否意味着同一个套接字的 recv()
和 send()
实际上是不相关的?
- 如果是这样,是根据定义还是 特定于实施?
- 如果不是,两者如何相互干扰?
谢谢。
I remember having read somewhere that a socket can be regarded as two independent half-duplex channels. Does it mean that recv()
and send()
of the same socket are actually irrelevant?
- if so, is it by definition or
implementation-specific? - if not, how the two interfere with each other?
thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我很好奇你认为它们会如何互相干扰。您认为您可能会收到您发送的信息吗?
I'm curious how you think they would interfere with each other. Are you thinking that you might receive what you sent?
如果是 SOCK_STREAM,您可以同时使用 send/recv。
前任 :
假设你有两个线程,一个负责发送数据
第二个负责接收数据,您可以执行以下
主要例程:
获取套接字 fd。
创建一个 POSIX 线程用于将缓冲区发送到此 fd。
创建一个 POSIX 线程来接收从此 fd 到达的数据。
连接到服务器。
线程 1 例程:
构造一个消息缓冲区;
将缓冲区发送到此 fd 中。
线程 2 例程:
从该 fd 接收数据。
处理日期。
In case of SOCK_STREAM, you can use send/recv concurrently.
Ex :
Suppose you have two threads, one is responsible for sending the data
and second one is responsible for receiving the data you can do following
main Routine :
get a socket fd.
create a POSIX thread for sending the buffer to this fd.
create a POSIX thread to receive the data arrived from this fd.
connect to a server.
Thread 1 Routine :
construct a message buffer;
send the buffer into this fd.
Thread 2 Routine :
recv data from this fd.
process the date.