{"record":{"id":"19e1d1777db5e5cf","repo":"python/cpython","slug":"unexpected-address-family","errorCode":null,"errorMessage":"unexpected address family","messagePattern":"unexpected address family","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"Lib/asyncio/base_events.py","lineNumber":1415,"sourceCode":"                    f'A datagram socket was expected, got {sock!r}')\n            if (local_addr or remote_addr or\n                    family or proto or flags or\n                    reuse_port or allow_broadcast):\n                # show the problematic kwargs in exception msg\n                opts = dict(local_addr=local_addr, remote_addr=remote_addr,\n                            family=family, proto=proto, flags=flags,\n                            reuse_port=reuse_port,\n                            allow_broadcast=allow_broadcast)\n                problems = ', '.join(f'{k}={v}' for k, v in opts.items() if v)\n                raise ValueError(\n                    f'socket modifier keyword arguments can not be used '\n                    f'when sock is specified. ({problems})')\n            sock.setblocking(False)\n            r_addr = None\n        else:\n            if not (local_addr or remote_addr):\n                if family == 0:\n                    raise ValueError('unexpected address family')\n                addr_pairs_info = (((family, proto), (None, None)),)\n            elif hasattr(socket, 'AF_UNIX') and family == socket.AF_UNIX:\n                for addr in (local_addr, remote_addr):\n                    if addr is not None and not isinstance(addr, str):\n                        raise TypeError('string is expected')\n\n                if local_addr and local_addr[0] not in (0, '\\x00'):\n                    try:\n                        if stat.S_ISSOCK(os.stat(local_addr).st_mode):\n                            os.remove(local_addr)\n                    except FileNotFoundError:\n                        pass\n                    except OSError as err:\n                        # Directory may have permissions only to create socket.\n                        logger.error('Unable to check or remove stale UNIX '\n                                     'socket %r: %r',\n                                     local_addr, err)\n","sourceCodeStart":1397,"sourceCodeEnd":1433,"githubUrl":"https://github.com/python/cpython/blob/bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6/Lib/asyncio/base_events.py#L1397-L1433","documentation":"Raised by create_datagram_endpoint() when neither local_addr nor remote_addr is given and family is left at its default 0 (AF_UNSPEC). Without an address there is no way to infer the address family, so the loop requires you to state it explicitly via family=.","triggerScenarios":"loop.create_datagram_endpoint(factory) with no local_addr, no remote_addr, and family left as 0; or family=0 passed explicitly with no addresses.","commonSituations":"Creating an unconnected datagram socket for sendto() use and forgetting to name the family; refactoring code that previously had remote_addr set.","solutions":["Pass family explicitly, e.g. family=socket.AF_INET or family=socket.AF_INET6, when creating an unconnected endpoint","Or supply local_addr/remote_addr so the family is derived from DNS resolution"],"exampleFix":"# before\ntransport, _ = await loop.create_datagram_endpoint(factory)\n\n# after\ntransport, _ = await loop.create_datagram_endpoint(factory, family=socket.AF_INET)","handlingStrategy":"validation","validationCode":"import socket\nif sock is None and not local_addr and not remote_addr:\n    assert family != 0, 'pass family=socket.AF_INET/AF_INET6 for unconnected datagram endpoints'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Default family=socket.AF_INET in your own datagram helper when no addresses are given","Document that unconnected sendto()-style endpoints require an explicit family"],"tags":["asyncio","udp","datagram","address-family"],"backgroundTag":null,"analyzedSha":"bc6749cc3b5ae4a5e88a6cc2d5b3bebbe354eae6","analyzedAt":"2026-08-14T22:01:13.976Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}