我刚刚从http://www.epx.com.br/pysctp/安装了pysctp,我无法正常工作。 我可能做错了什么?
我在Red Hat Linux上。
Python 2.7.2 (default, Oct 25 2011, 10:11:43) [GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import socket >>> import sctp >>> sk = sctp.sctpsocket_tcp(socket.AF_INET) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/python2.7/lib/python2.7/site-packages/sctp.py", line 1644, in __init__ sctpsocket.__init__(self, family, TCP_STYLE, sk) File "/usr/local/python2.7/lib/python2.7/site-packages/sctp.py", line 1016, in __init__ self.events = event_subscribe(self) File "/usr/local/python2.7/lib/python2.7/site-packages/sctp.py", line 623, in __init__ self.__dict__.update(self.container._get_events()) File "/usr/local/python2.7/lib/python2.7/site-packages/sctp.py", line 1356, in _get_events return _sctp.get_events(self._sk.fileno()) IOError: [Errno 22] Invalid argument
有人打破了ABI(增加了几个字段来结构sctp_event_subscribe和内核希望用户空间想要新的数额)。 这里是一个kludge,适当的修复将是内核接受已经被编译为一个较小的struct_event_subscribe头的旧应用程序,只是不给他们新的领域…)。 甚至更新到lksctp-devel中的新样式头并重新编译一切。
--- _sctp.c~ 2011-12-20 16:48:45.000000000 +0200 +++ _sctp.c 2011-12-20 16:49:23.498912252 +0200 @@ -832,8 +832,9 @@ { PyObject* ret = 0; int fd; + char padding[4]; // Happily overflowing here... struct sctp_event_subscribe v; - socklen_t lv = sizeof(v); + socklen_t lv = 10; // Come to think of it, it could have been 9 at some point if (PyArg_ParseTuple(args, "i", &fd)) { if (getsockopt(fd, SOL_SCTP, SCTP_EVENTS, &v, &lv)) {
看起来像pysctp
内部的错误。 get_events
调用getsockopt
。
getsockopt(2)
说:
EINVAL optlen invalid in setsockopt().
布赖恩的权利 – 有一些问题调用SCTP_EVENTS getsockopt
。 我一直无法解决这个问题,但是我已经在sctp.py中注释掉了这一行:
self.__dict__.update(self.container._get_events())
SCTP插座似乎工作正常。 我还没有需要得到SCTP_EVENTS,所以现在就好了。