python / python/cpython

multiprocessing.connection.Client not support IPV6

Ouverte
#99,766 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

stdlib type-bug
Langage dominant
Python
Étoiles
77.2k
Forks
36k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug report

1、Test Code:

from multiprocessing.connection import Client
address = ('fe80::01',9999,0,0)

with Client(address,family='AF_INET6', authkey=b'1') as conn:
    print(conn.recv())

2、Error message

Traceback (most recent call last):
  File "c:\Users\Tiger\Desktop\http\c.py", line 5, in <module>
    with Client(address,family='AF_INET6', authkey=b'1') as conn:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Tiger\AppData\Local\Programs\Python\Python311\Lib\multiprocessing\connection.py", line 501, in Client
    c = SocketClient(address)
        ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Tiger\AppData\Local\Programs\Python\Python311\Lib\multiprocessing\connection.py", line 629, in SocketClient
    s.connect(address)
TypeError: AF_INET address must be a pair (host, port)

3、Causes and Solutions
Snippets of code in lib/multiprocessing/connection.py

def address_type(address):
    '''
    Return the types of the address

    This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
    '''
    if type(address) == tuple:
        return 'AF_INET'  
    elif type(address) is str and address.startswith('\\\\'):
        return 'AF_PIPE'
    elif type(address) is str or util.is_abstract_socket_namespace(address):
        return 'AF_UNIX'
    else:
        raise ValueError('address type of %r unrecognized' % address)

An ipv6 address is a four-tuple,the code for the following sentence should be perfected

   if type(address) == tuple:
        return 'AF_INET'  

The modified code is as follows:

if type(address) == tuple:
        if len(address)==2:
            return 'AF_INET'
        else:
            return 'AF_INET6'

That's all, ok!

4、A more complete solution
"lib/multiprocessing/connection.py"

Modify the SocketClient function,add parameters family,......
def SocketClient(address,family=None):

Linked PRs
  • gh-99969

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par lib/multiprocessing/connection.py et la reproduction fournie de Client utilisant un quadruplet AF_INET6. Suivez address_type et SocketClient, puis vérifiez qu’une connexion Client IPv6 ne provoque plus l’erreur de paire AF_INET ; l’issue contient également un lien vers la PR gh-99969 pour des travaux connexes.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
networking
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.