【问题标题】:What is the real buffer in socket method recv(bufsize) in python and recv(char *buf) in c?python中的socket方法recv(bufsize)和c中的recv(char *buf)中真正的缓冲区是什么?
【发布时间】:2018-03-28 16:39:43
【问题描述】:

在python中,方法是:

socket.recv(bufsize[, flags])

在C语言中,方法是:

int recv( _In_ SOCKET s, _Out_ char *buf, _In_ int len, _In_ int flags)

这两种方法这里的缓冲区是什么?

如果我创建一个TCP 套接字,我认为它是receive window sizereceive buffer。但是当我捕获到测试 tcp 消息时,我发现我错了。

我猜缓冲区是套接字缓冲区。当 tcp 消息到来并首先进入tcp's buffer(在传输层中)时。然后tcp的接收窗口开始滑动接收数据,如果消息正确,则将它们传递到socket buffer(上述两种方法中的真正缓冲区)。最后将数据传递到应用程序。

我说的对吗?

【问题讨论】:

  • C的函数对应Python的recv_into
  • @AnttiHaapala 很棒,但是 recv() 和 recv_into() 有什么区别?一个用系统缓冲区,一个用自己创建的缓冲区?

标签: python c sockets tcp


【解决方案1】:

这里有两种类型的缓冲区:

  1. recv() 中提到的缓冲区位于正在运行的进程内存中的用户空间中。
  2. 内核还在内核空间中维护一个缓冲区。当您调用recv() 时,数据将从内核空间复制到用户空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2012-04-04
    • 2016-01-20
    相关资源
    最近更新 更多