Como ler todos os bytes disponíveis em um buffer de soquete? Python3

Nik Konst

Quero ler todos os bytes disponíveis no buffer, o código abaixo lido por blocos de 100 bytes.

1) É possível ler todos os bytes que estão no buffer?

2) qual é o valor padrão de sock.recv ()? // sem argumento

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_address = ('localhost', 1489)
    sock.connect(server_address)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 8192)  # Buffer size 8192
    sock.setblocking(0) # set non-blocking

    while 1:
        read_ready = select.select([sock], [], [], timeout_in_seconds)  
        if read_ready[0]: # we have what to read
            print('ready')
            data = sock.recv(100)
            if not data:
                break
            print(data)

UPD: 3) E se eu definir sock.recv (1000000), ele lerá todo o buffer, certo? (suponha que a velocidade dos dados seja muito menor)

O objetivo principal é ler continuamente um fluxo

Steffen Ullrich

1) É possível ler todos os bytes que estão no buffer?

recv has no idea how many bytes are in the socket buffer or how many might arrive while trying to read from the buffer. But you can either use recv on a non-blocking socket and read until you get an error because no more data are available (errno.EWOULDBLOCK). Or you could use a zero timeout (0, not None) in select.select to just check (poll) if there are still data to read.

2) what is the default value of sock.recv()? // no argument

The documentation for recv says clearly how this function needs to be called:

socket.recv(bufsize[, flags])

Thus, bufsize is not in argument you can skip and your attempt to do this should result in an error.

3) What if I set sock.recv(1000000), will it read all the buffer, right?

Ele só lerá até o número determinado de bytes. A quantidade de dados que ele irá ler na realidade também dependerá do tamanho do buffer de soquete subjacente no kernel, ou seja, ele não pode ler nenhum dado que ainda não esteja no buffer de soquete, mesmo que o cliente já os tenha enviado.

Outra restrição se aplica se o soquete for um soquete SSL. Nesse caso recv, geralmente retornará apenas os dados do quadro SSL atual.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como ler todos os bytes disponíveis em um buffer de soquete? Python3

Como selecionar todos os índices disponíveis em uma coluna de dataframe em Python

Como ler o buffer stdin com antecedência antes de um EOF em python3?

maneira eficiente de ler os primeiros 128 bytes de um soquete, mas escrever o resto diretamente em um arquivo

Como verificar a quantidade de dados disponíveis para um soquete em C e Linux

Como você consulta uma lista de todos os repositórios que estão disponíveis em um WORKSPACE?

Como você torna as variáveis feitas dentro de um método disponíveis para todos os outros métodos em uma classe?

Como ler todos os bytes de um arquivo no winrt com ReadBufferAsync?

como acessar a sessão de soquete em todos os clusters

Como ler os dados de todos os arquivos um por um em uma pasta com Java?

Como posso listar todos os pacotes / módulos disponíveis para Python a partir de um script Python?

Como posso imprimir / depurar todos os campos disponíveis de um recurso de fonte de dados?

Como posso imprimir / depurar todos os campos disponíveis de um recurso de fonte de dados?

Como mostrar todos os dígitos de um número REALMENTE grande em Python3

Como obter todos os métodos disponíveis em meu código que possuem um nome específico em Julia?

Como definir todos os valores disponíveis de um modelo para outro modelo no django?

Como posso * apenas * obter o número de bytes disponíveis em um disco no bash?

Como ler todos os bytes do corpo POST em um aplicativo ASP.NET usando System.IO.Pipelines.PipeReader?

Como os métodos de desenvolvimento estão disponíveis em ApplicationController.rb?

Como consigo um trabalho de ativação para usar todos os recursos disponíveis em um cluster do Google Cloud DataProc?

Como ler um inteiro de um buffer em Rust 1.0?

Como ler o conteúdo de todos os arquivos em um diretório

Como posso ler todos os pares de valores-chave no arquivo .ini em um objeto?

Obtenha todos os identificadores UIViewController disponíveis de um UIStoryboard

O select () garante que todos os dados estão disponíveis para leitura de um soquete ou apenas parte dos dados

Como listar todos os modelos de pesquisa disponíveis no elasticsearch?

Como visualizar todos os mapas de cores disponíveis no matplotlib?

Como visualizar todos os mapas de cores disponíveis no matplotlib?

Como usar o opencv em Python3 para ler o arquivo do buffer de arquivo