2017-10-17 35 views
1

在Python中,方法是:什么是在Python中的套接字方法recv(bufsize)和recv(char * buf)在c中的真正缓冲区?

socket.recv(bufsize[, flags]) 

在C,其方法是:

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

这里有什么缓冲在这两个方法?

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

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

我对不对?

+0

的C *功能*对应的Python ['recv_into'(https://docs.python.org/3/library/socket.html#socket.socket.recv_into) –

+0

@AnttiHaapala伟大的,但什么recv()和recv_into()之间的区别是什么?一个使用系统缓冲区,另一个使用我自己创建的缓冲区? – hcnhcn012

回答

4

有2种类型这里缓冲液:

  1. recv()提到是在用户空间中是在运行过程中的存储器中的缓冲区。内核还在内核空间维护一个缓冲区。当您拨打recv()时,数据将从内核空间复制到用户空间。