2011-12-15 6 views
2

Я только что установил pysctp от http://www.epx.com.br/pysctp/, и мне не удается получить базовый пример работы. Что я могу делать неправильно?Как начать работу с стеком SCTP Python (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 

ответ

2

Кто-то сломал ABI (добавлено еще несколько полей в struct sctp_event_subscribe, и ядро ​​хочет, чтобы пространство пользователей хотело получить новую сумму). Вот кудд, правильное исправление было бы для ядра принимать старые приложения, которые были скомпилированы против заголовков с меньшим 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)) { 
1

Похож на ошибку, внутреннюю по отношению к pysctp. get_events звонки getsockopt.

getsockopt(2) говорит:

EINVAL optlen invalid in setsockopt(). 
1

право Брайана - есть какая-то вопрос вызывающему getsockopt для SCTP_EVENTS. Я не был в состоянии решить, но я закомментировать эту строку в sctp.py:

self.__dict__.update(self.container._get_events()) 

В SCTP розетки, то, кажется, работает хорошо. Мне еще не нужно было получить SCTP_EVENTS, так что сейчас все в порядке.

 Смежные вопросы

  • Нет связанных вопросов^_^