SCTP stack for Python
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


PySCTP - SCTP bindings for Python

Elvis Pfützenreuter 
Instituto Nokia de Tecnologia (
epx __AT__

Philippe Langlois
P1 Security (
phil __AT__


sudo python install

* to see what this is going to install without actually doing it:
python install --dry-run

* to just build and not install:
python build


You can use to automatically install dependencies for Debian/Ubuntu:
make installdeps

Otherwise, necessary would be e.g. on Ubuntun libsctp-dev, python-dev and / or 

For Mac OSX (Montain lion OSX 10.8):

Mac OSX SCTP Network Kernel Extension (NKE) available at:


PySCTP gives access to the SCTP transport protocol from Python language.
It extends the traditional socket interface, allowing
SCTP sockets to be used in most situations where a TCP or UDP socket
would work, while preserving the unique characteristics of the protocol.

For more information about SCTP, go to or RFC 4960.
For discussion, sources, bugs, go to

In a nutshell, PySCTP can be used as follows:


import socket
import sctp

sk = sctp.sctpsocket_tcp(socket.AF_INET)
sk.connect(("", 36413))

... most socket operations work for SCTP too ...



The autotest programs ( and are actually a good
example of pysctp usage.

The BSD/Sockets SCTP extensions are defined by an IETF draft
(draft-ietf-tsvwg-sctpsocket-10.txt) and PySCTP tries to map those
extensions very closely. So, to really take the most advantage of
SCTP and PySCTP, you must understand how the API works. You can
find advice about it in the the draft itself (not incredibly easy
to understand though), as well the 3rd edition of Unix Network 

WARNING: the API of this module is not stable yet. We expect not to
change it too much, but do not base any critical work on it yet :)


1) The "sctp" module

The "sctp" module is the Python side of the bindings. The docstrings
of every class and method can give good advice of functions, but the
highlights are:

* sctpsocket is the root class for SCTP sockets, that ought not be used
  directly by the users. It does *not* inherit directly from Python
  standard socket; instead it *contains* a socket. That design was
  followed mostly because UDP-style sockets can be "peeled off" and 
  return TCP-style sockets. 

  sctpsocket delegates unknown methods to the socket. This ensures that
  methods like close(), bind(), read(), select() etc. will work as expected.
  If the real socket is really needed, it can be obtained with

* As said, "Normal" socket calls like open(), bind(), close() etc. 
  can be used on SCTP sockets because they are delegated to the
  Python socket. 

* Users will normally use the sctpsocket_tcp (TCP style) and sctpsocket_udp
  (UDP style) classes. Some calls that are implemented in sctpsocket but 
  do not make sense in a particular style are rendered invalid in each
  class (e.g. peeloff() in TCP-style sockets).

2) The "_sctp" module

This is the C side of the bindings, that provides the "glue" between
Python and the C API. The regular PySCTP user should not need to get 
into this, but power users and developers may be interested in it. 

The interface between Python and C is designed to be as simple as
possible. In particular, no object is created in C side, just 
simple types (strings, integers, lists, tuples and dictionaries).

The translation to/from complex objects is done entirely in Python.
It avoids that _sctp depends on sctp.

NOTE: it all has been tested agains lksctp-utils 1.0.1 and kernel
2.6.10, that come with Ubuntu Hoary. Some newer calls like connectx()
depend of testing on a newer environment to be implemented.


This module is licensed under the LGPL license.


Elvis Pfützenreuter <elvis.pfutzenreuter __AT__>
Philippe Langlois <phil __AT__>
Casimiro Daniel NPRI <CasimiroD  __AT__> - patch for new SCTP_* constants