有问题的代码部分大致如下:
import socket, my_custom_socket_address_getting_module
underlyingSocketFileno = my_custom_socket_address_getting_module.get()
connectedSocket = socket.socket( fileno=underlyingSocketFileno )
clientAddress = connectedSocket.getpeername()
其中“ my_custom_socket_address_getting_module”是一个自定义C扩展名,它返回我机器上一个打开的套接字的地址(很长).
前两行似乎运行良好,并且Python套接字对象看起来很明智(例如fd和其他套接字属性在调试器中看起来正确),但是尝试在该对象上调用getpeername会引发以下异常:
:[WinError 10014] The system detected an invalid pointer address in attempting to use a pointer argument in a call
由于我让Python构造了两个Python套接字(大概还支持了OS SOCKET),所以我不知道损坏的指针地址将来自何处.
我相当有信心从我的自定义模块提供给Python的套接字地址是正确的,并且它返回的套接字地址是有效的,因为该扩展名与我的旧Python版本完全兼容.
当我使用最新版本的Python(3.6.5)时,这个问题就开始了-关于这个新版本为什么会这样的想法?
先前的工作版本是Python 1.5.2(是的,是的).
(操作系统为Microsoft Windows 8.1 64,Python 3.6.5,使用MSVCC v.1911构建)