socket.hs recvfrom()函数接收单个数据包吗?

时间:2013-12-27 16:48:34

标签: sockets unix

man page for recvfrom将其行为概括为"从套接字接收消息"。如果套接字的类型为SOCK_STREAM或SOCK_DGRAM,则为" message"同义词"包"?如果没有,它有何不同?

1 个答案:

答案 0 :(得分:1)

我的第一个想法是recvfrom在流套接字上起作用,因为没有理由禁止它。就像在着名的名言中一样:

  

“Unix并不是为了阻止用户做蠢事,因为这也会阻止他们做出聪明的事情。” - Doug Gwyn

如果它符合我的预期,您可以像组合read()getpeername()一样使用它,因为它会返回发件人的地址。这可能被认为是聪明的。

但后来我在Linux上尝试过它,并没有这样做。源地址缓冲区未更改,长度指示器设置为0.

所以现在我不知道该说什么,除了不要在流套接字上使用它。这不适合他们。

ADDENDUM :不,即使在我最疯狂的梦想中,我也不会期望它能让您访问TCP流中的数据包边界。通过tcp接收机制发送的数据不再是由数据包组成的。