man page for recvfrom将其行为概括为"从套接字接收消息"。如果套接字的类型为SOCK_STREAM或SOCK_DGRAM,则为" message"同义词"包"?如果没有,它有何不同?
答案 0 :(得分:1)
我的第一个想法是recvfrom
在流套接字上起作用,因为没有理由禁止它。就像在着名的名言中一样:
“Unix并不是为了阻止用户做蠢事,因为这也会阻止他们做出聪明的事情。” - Doug Gwyn
如果它符合我的预期,您可以像组合read()
和getpeername()
一样使用它,因为它会返回发件人的地址。这可能被认为是聪明的。
但后来我在Linux上尝试过它,并没有这样做。源地址缓冲区未更改,长度指示器设置为0.
所以现在我不知道该说什么,除了不要在流套接字上使用它。这不适合他们。
ADDENDUM :不,即使在我最疯狂的梦想中,我也不会期望它能让您访问TCP流中的数据包边界。通过tcp接收机制发送的数据不再是由数据包组成的。