Title: Don't refer to getsockaddrarg in error messages
Type: enhancement Stage: resolved
Components: Extension Modules Versions: Python 3.7
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: Oren Milman, benjamin.peterson, serhiy.storchaka
Priority: normal Keywords:

Created on 2017-03-17 06:43 by serhiy.storchaka, last changed 2018-09-11 16:51 by benjamin.peterson. This issue is now closed.

File name Uploaded Description Edit Oren Milman, 2017-08-20 21:55 a dirty script to test PR 3163
Pull Requests
URL Status Linked Edit
PR 687 serhiy.storchaka, 2017-03-17 06:43
PR 3163 merged Oren Milman, 2017-08-20 21:48
Messages (5)
msg289745 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2017-03-17 06:43
getsockaddrarg() is an internal C function in the socket module implementation used in a number of socket methods (bind(), connect(), connect_ex(), sendto(), sendmsg()) for creating C structure sock_addr_t from Python tuple. Error messages raised when pass incorrect socket address argument to these function contain the name "getsockaddrarg" despite the fact that it is not directly exposed at Python level, nor the name of standard C function.

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.bind(42)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: getsockaddrarg: AF_INET address must be tuple, not int
>>> s.bind(())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: getsockaddrarg() takes exactly 2 arguments (0 given)

I think that error messages shouldn't refer to non-existing function "getsockaddrarg()".

This issue is a part of more general issue28261.
msg289784 - (view) Author: Oren Milman (Oren Milman) * Date: 2017-03-17 20:50
note that #15988 also left 3 changes for this issue to fix, as can be
seen by searching for '29832' in the comments of PR 668.

for example, this issue should also fix the following inconsistent
error messages:
>>> socket.socket(family=socket.AF_INET6).bind(('::1', -1))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: getsockaddrarg: port must be 0-65535.
>>> socket.socket(family=socket.AF_INET6).bind(('::1', -1 << 1000))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
msg300608 - (view) Author: Oren Milman (Oren Milman) * Date: 2017-08-20 21:55
here is a dirty script to test my PR.

the script contains tests to anything I managed to test using my
Windows 10 and Ubuntu 16.04 VM, i.e. all of the changes, except for
the 'unsupported CAN protocol' message, and the changes of the code
that handles the PF_SYSTEM family.
msg303541 - (view) Author: Oren Milman (Oren Milman) * Date: 2017-10-02 15:09
Should i remove the code that i wasn't able to test from the PR, and
leave such changes to someone that is able to test it?

(of course, if there is some way i can do it using a VM, please point
that out, and i would try to set up this VM.)
msg325028 - (view) Author: Benjamin Peterson (benjamin.peterson) * (Python committer) Date: 2018-09-11 16:51
New changeset 735171e33486131d93865cf851c0c3d63fffd364 by Benjamin Peterson (Oren Milman) in branch 'master':
closes bpo-29832: Remove "getsockaddrarg" from error messages. (GH-3163)
Date User Action Args
2018-09-11 16:51:32benjamin.petersonsetstatus: open -> closed

nosy: + benjamin.peterson
messages: + msg325028

resolution: fixed
stage: resolved
2017-10-02 15:09:14Oren Milmansetmessages: + msg303541
2017-08-20 21:55:40Oren Milmansetfiles: +

messages: + msg300608
2017-08-20 21:48:27Oren Milmansetpull_requests: + pull_request3199
2017-03-17 20:50:11Oren Milmansetmessages: + msg289784
2017-03-17 06:43:50serhiy.storchakasetpull_requests: + pull_request564
2017-03-17 06:43:17serhiy.storchakacreate