Module sctp¶
Objects¶
- class sctp.sctp_generic(**kwds)¶
- Bases:
- __c_size__¶
- Type:
- Value:
0
The size in bytes of the corresponding C-structure (
sizeof()). See note in_sctp.sctpabout alignment of C-structures.
- __optname__¶
- Type:
- Value:
0
Socket option name (e.g.,
SCTP_RTOINFO)
- property fmt¶
- Classmethod:
- Type:
The format used by
struct.pack()in propertyto_bytes. It takes into account any possible padding (see note in_sctp.sctpabout padding).
- property to_bytes¶
- Type:
Converts the dictionary into a bytes object (using
struct.pack()with formatfmt).
- set_value(field, value)¶
Warning
This class cannot be instanciated.
- class sctp.sctp_initmsg(*, sinit_num_ostreams=0, sinit_max_instreams=0, sinit_max_attempts=0, sinit_max_init_timeo=0)¶
- Bases:
See
SCTP_INITMSGsocket option.
- class sctp.sctp_paddrparams(*, spp_assoc_id=0, spp_address=bytes(SOCKADDR_STORAGE_CSIZE), spp_hbinterval=0, spp_pathmaxrxt=0, spp_pathmtu=0, spp_flags=0, spp_ipv6_flowlabel=0, spp_dscp=0)¶
- Bases:
See
SCTP_PEER_ADDR_PARAMSsocket option.
- class sctp.sctp_paddrinfo(*, spinfo_assoc_id=0, spinfo_address=bytes(SOCKADDR_STORAGE_CSIZE), spinfo_state=0, spinfo_cwnd=0, spinfo_srtt=0, spinfo_rto=0, spinfo_mtu=0)¶
- Bases:
See
SCTP_GET_PEER_ADDR_INFOsocket option.
- class sctp.sctp_rtoinfo(*, srto_assoc_id=0, srto_initial=0, srto_max=0, srto_min=0)¶
- Bases:
See
SCTP_RTOINFOsocket option.
- class sctp.sctp_assocparams(*, sasoc_assoc_id=0, sasoc_asocmaxrxt=0, sasoc_number_peer_destinations=0, sasoc_peer_rwnd=0, sasoc_local_rwnd=0, sasoc_cookie_life=0)¶
- Bases:
See
SCTP_ASSOCINFOsocket option.
- class sctp.sctp_setprim(*, ssp_assoc_id=0, ssp_addr=bytes(SOCKADDR_STORAGE_CSIZE))¶
- Bases:
See
SCTP_PRIMARY_ADDRsocket option.
- class sctp.sctp_setadaptation(*, ssb_adaptation_ind=0)¶
- Bases:
See
SCTP_ADAPTATION_LAYERsocket option.
- class sctp.sctp_assoc_value(*, assoc_id=0, assoc_value=0)¶
- Bases:
See
SCTP_MAXSEG,SCTP_MAX_BURST,SCTP_CONTEXTsocket options.
- class sctp.sctp_sack_info(*, sack_assoc_id=0, sack_delay=0, sack_freq=0)¶
- Bases:
See
SCTP_DELAYED_SACKsocket option.
- class sctp.sctp_authkeyid(*, scact_assoc_id=0, scact_keynumber)¶
- Bases:
See :py:data:
SCTP_AUTH_ACTIVE_KEYsocket option.
- class sctp.sctp_default_prinfo(*, pr_policy=SCTP_PR_SCTP_NONE, pr_value=0, pr_assoc_id=0)¶
- Bases:
See
SCTP_DEFAULT_PRINFOsocket option.
- class sctp.sctp_status(*, sstat_assoc_id=0, sstat_state=0, sstat_rwnd=0, sstat_unackdata=0, sstat_penddata=0, sstat_instrms=0, sstat_outstrms=0, sstat_fragmentation_point=0, sstat_primary=bytes(sctp_paddrinfo.size))¶
- Bases:
See
SCTP_STATUSsocket option.
- class sctp.sctp_setpeerprim(*, sspp_assoc_id=0, sspp_addr=bytes(SOCKADDR_STORAGE_CSIZE))¶
- Bases:
See
SCTP_SET_PEER_PRIMARY_ADDRsocket option.
- class sctp.sctp_authchunk(*, sauth_chunk=ChunkTypes.DATA.value)¶
- Bases:
See
SCTP_AUTH_CHUNKsocket option.
- class sctp.sctp_authkey(*, sca_assoc_id=0, sca_keynumber=0, sca_key=None)¶
- Bases:
See
SCTP_AUTH_KEYsocket option.
- class sctp.sctp_event(*, se_assoc_id=0, se_type=0, se_on=0)¶
- Bases:
See
SCTP_EVENTsocket option.
- class sctp.sctp_socket(family, type, proto=IPPROTO_SCTP)¶
- Bases:
- getsockopt(level, optname, optval=None)¶
- Parameters:
level (int) – option level (e.g.,
IPPROTO_SCTP)optname (int) – option name (e.g.,
SCTP_GET_PEER_ADDR_INFO)optval (
None,intor object inherited fromsctp_generic)
- Returns:
a
intobject, abytesobject, atupleobject or an object inherited fromsctp_generic- Raises:
Note
When optname is not
IPPROTO_SCTP,getsockopt()behaves exactly like methodgetsockopt()of the standard Python objectsocket.Some examples when level is
IPPROTO_SCTP:>>> sock = sctp_socket(AF_INET, SOCK_SEQPACKET) >>> sock.connect(('localhost', 2000)) >>> spinfo = sctp_paddrinfo(spinfo_address=(('localhost', 20000))) >>> print(s.getsockopt(IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, spinfo)) {'spinfo_assoc_id': 29, 'spinfo_address': ('127.0.0.1', 20000), 'spinfo_state': 2, 'spinfo_cwnd': 131064, 'spinfo_srtt': 0, 'spinfo_rto': 3000, 'spinfo_mtu': 65532}
>>> sock = sctp_socket(AF_INET, SOCK_STREAM) >>> print(sock.getsockopt(IPPROTO_SCTP, SCTP_INITMSG)) {'sinit_num_ostreams': 10, 'sinit_max_instreams': 65535, 'sinit_max_attempts': 8, 'sinit_max_init_timeo': 60000}
>>> sock = sctp_socket(AF_INET, SOCK_STREAM) >>> id = sock.sctp_connectx((('localhost', 20000),), assoc_id=True) >>> print(sock.getsockopt(IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, id)) {'gauth_assoc_id': 3, 'gauth_chunks': (128, 193)}
- setsockopt(level, optname, *values)¶
- Parameters:
level (int) – option level (e.g.,
IPPROTO_SCTP)optname (int) – option name (e.g.,
SCTP_PEER_ADDR_PARAMS)values – the same values as those required by method
setsockopt()of the standard Python objectsocketor an object inherited fromsctp_generic
- Returns:
None- Raises:
Note
When optname is not
IPPROTO_SCTP,setsockopt()behaves exactly like methodsetsockopt()of the standard Python objectsocket.An example showing how to change the number of output streams during initialization:
>>> sock = sctp_socket(AF_INET, SOCK_STREAM) >>> sinit = sock.getsockopt(IPPROTO_SCTP, SCTP_INITMSG) >>> print(sinit['sinit_num_ostreams']) 10 >>> sinit['sinit_num_ostreams'] = 100 >>> sock.setsockopt(IPPROTO_SCTP, SCTP_INITMSG, sinit)
Some specific socket options¶
-
Last argument of
setsockopt()must be0,1or2. -
To set this option:
setsockopt(IPPROTO_SCTP, SCTP_HMAC_IDENT, ids)whereidsis a tuple of HMAC identifiers. For example:>>> setsockopt(IPPROTO_SCTP, SCTP_HMAC_IDENT, (SCTP_AUTH_HMAC_ID_SHA256, SCTP_AUTH_HMAC_ID_SHA1))
Warning
Algorithm
SCTP_AUTH_HMAC_ID_SHA1is mandatory, otherwiseValueErroris raised.To get the list of supported HMAC identifiers:
>>> print(getsockopt(IPPROTO_SCTP, SCTP_HMAC_IDENT)) (3, 1)
SCTP_PEER_AUTH_CHUNKS,SCTP_LOCAL_AUTH_CHUNKSBoth options can take an association identifier as an optional parameter:
>>> sock = sctp_socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP) >>> id = sock.sctp_connectx((('localhost', 20000),), assoc_id=True) >>> print(sock.getsockopt(IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, id)) {'gauth_assoc_id': 3, 'gauth_chunks': (128, 193)}
-
This (write-only) option takes a member of
ChunkTypesas argument:>>> sauth = sctp_authchunk(sauth_chunk=ChunkTypes.COOKIE_ACK) >>> sock.setsockopt(IPPROTO_SCTP, SCTP_AUTH_CHUNK, sauth)
Warning
Chunk types
INIT,INIT_ACK,SHUTDOWN_COMPLETEandAUTH, are not allowed, otherwiseValueErroris raised. -
This option will set a shared secret key as follows:
>>> sca = sctp_authkey(sca_keynumber=13, sca_key=b'some secret') >>> sock.setsockopt(IPPROTO_SCTP, SCTP_AUTH_KEY, sca)
To disable and then remove this shared secret key:
>>> scact = sctp_authkeyid(scact_keynumber=13) >>> sock.setsockopt(IPPROTO_SCTP, SCTP_AUTH_DEACTIVATE_KEY, scact) >>> sock.setsockopt(IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, scact)
- sctp_opt_info([id, ]optname, optval)¶
- Parameters:
id (int) – association identifier, default is 0 (ignored if socket is a one-to-one socket)
optname (int) – option name (e.g.,
SCTP_ASSOCINFO)optval – an object inherited from
sctp_generic(e.g.,sctp_assocparams)
- Returns:
a
intobject, abytesobject, atupleobject or an object inherited fromsctp_generic- Raises:
The optval parameter must have a field whose name ends with
'assoc_id', such as'srto_assoc_id', otherwiseValueErroris raised. The value of id is then assigned to this field before callinggetsockopt(IPPROTO_SCTP, optname, optval).An example with one-to-one socket:
>>> sock = sctp_socket(AF_INET, SOCK_STREAM) >>> sock.sctp_connectx((('localhost', 20000),)) >>> optval = sctp_assoc_value() >>> opt = sctp_opt_info(SCTP_MAXSEG, optval) >>> print(opt) {'assoc_id': 0, 'assoc_value': 65484}
Another one with one-to-many socket:
>>> sock = sctp_socket(AF_INET, SOCK_SEQPACKET) >>> sock.sctp_connectx((('localhost', 20000),)) >>> optval = sctp_status() >>> opt = sctp_opt_info(SCTP_STATUS, optval) ... OSError: sctp_socket._getsockopt(): [22, Invalid argument] # parameter `id' is required for one-to-many sockets >>> id = sock.sctp_connectx((('localhost', 20000),), assoc_id=True) >>> optval = sctp_status() >>> opt = sctp_opt_info(id, SCTP_STATUS, optval) # ^^ # required parameter id >>> print(opt) {'sstat_assoc_id': 321, 'sstat_state': 4, 'sstat_rwnd': 106496, 'sstat_unackdata': 0, 'sstat_penddata': 0, 'sstat_instrms': 2, 'sstat_outstrms': 10, 'sstat_fragmentation_point': 65484, 'sstat_primary': {'spinfo_assoc_id': 321, 'spinfo_address': ('127.0.0.1', 20000), 'spinfo_state': 2, 'spinfo_cwnd': 131064, 'spinfo_srtt': 0, 'spinfo_rto': 3000, 'spinfo_mtu': 65532}}
Note
In fact, if the
'assoc_id'field of optval is named'field_assoc_id'for example,sctp_opt_info(id, optname, optval)is equivalent to:optval['field_assoc_id'] = id;getsockopt(IPPROTO_SCTP, optname, optval).
Some useful objects¶
- class sctp.ChunkTypes¶
- Bases:
- DATA, INIT, INIT_ACK, SACK, HEARTBEAT, HEARTBEAT_ACK,
- ABORT, SHUTDOWN, SHUTDOWN_ACK, ERROR, COOKIE_ECHO, COOKIE_ACK,
- SHUTDOWN_COMPLETE, AUTH
- name(type)¶
- Classmethod:
- Parameters:
type (int) – chunk type as an integer in range [0-255] (see RFC 4960 – section-3.2)
- Returns:
the plain name of the chunk type (e.g.,
ChunkTypes.name(11)returns'COOKIE_ACK')- Raises:
TypeError – if type is not an integer in range [0-255]