2017-10-17 5 views
1

は、方法は次のとおりです。pythonではソケットメソッドrecv(bufsize)、cではrecv(char * buf)の実際のバッファは何ですか? Pythonで

socket.recv(bufsize[, flags]) 

Cでは、この方法は次のとおりです。

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

バッファは、これらの二つの方法では、ここでは何ですか?

TCPソケットを作成すると、receive window sizeまたはreceive bufferと思っていました。しかし、私はテストのTCPメッセージをキャプチャしたとき、私は間違っていた。

私はバッファがソケットバッファだと思います。 tcpメッセージが来て、最初にtcp's buffer(トランスポート層内)に入ります。そして、tcpの受信ウィンドウがデータを受信するためにスライドし始め、メッセージが正しい場合にはsocket buffer(上記の2つの方法では実際のバッファ)に配送し始めます。最後に、データはアプリに配信されます。

私は正しいですか?

+0

のC *の関数*パイソン[ 'recv_into'(https://docs.python.org/3/library/socket.html#socket.socket.recv_into) –

+0

@AnttiHaapalaグレートに対応するが、何recv()とrecv_into()の違いは何ですか? 1つはシステムバッファを使用し、もう1つは自分で作成したバッファを使用しますか? – hcnhcn012

答えて

4

バッファの2種類がここにあります

  1. recv()に言及したバッファは、実行中のプロセスのメモリ内にあるユーザ空間です。
  2. カーネルはまた、カーネルスペースにバッファを保持します。 recv()に電話すると、データはカーネルスペースからユーザースペースにコピーされます。
関連する問題