Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 82

Автор Уильям БтивСнс

УвСдомлСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

struct sctp_tlv {

 u_int16_t sn_type;

 u_int16_t sn_flags;

 u_int32_t sn_length;

};


/* ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ событии */

union sctp_notification {

 struct sctp_tlv sn_header;

 struct sctp_assoc_change sn_assoc_change;

 struct sctp_paddr_change sn_paddr_change;

 struct sctp_remote_error sn_remote_error;

 struct sctp_send_failed sn_send_failed;

 struct sctp_shutdown_event sn_shutdown_event;

 struct sctp_adaption_event sn_adaption_event;

 struct sctp_pdapi_event sn_pdapi_event;

};

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ значСния Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ»Π΅ sn_header. Π’Π°Π±Π»ΠΈΡ†Π° 9.2 содСрТит значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² поля sn_header, sn_type, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния поля подписки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ сокСта SCTP_EVENTS.


Π’Π°Π±Π»ΠΈΡ†Π° 9.2. Π’ΠΈΠΏ ΠΈ ΠΏΠΎΠ»Π΅ подписки

sn_type ПолС подписки SCTP_ASSOC_CHANGE sctp_association_event SCTP_PEER_ADDR_CHANGE sctp_address_event SCTP_REMOTE_ERROR sctp_peer_error_event SCTP_SEND_FAILED sctp_send_failure_event SCTP_SHUTDOWN_EVENT sctp_shutdown_event SCTP_ADAPTION_INDICATON sctp_adaption_layer_event SCTP_PARTIAL_DELIVERY_EVENT sctp_partial_delivery_event

Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ увСдомлСния имССтся своя собствСнная структура, которая содСрТит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΌ событии.

β–  SCTP_ASSOC_CHANGE

Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ сообщаСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, связанноС с ассоциациями: Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° новая ассоциация ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

struct sctp_assoc_change {

 u_int16_t sac_type;

 u_int16_t sac_flags;

 u_int32_t sac_length;

 u_int16_t sac_state;

 u_int16_t sac_error;

 u_int16_t sac_outbound_streams;

 u_int16_t sac_inbound_streams;

 sctp_assoc_t sac_assoc_id;

 uint8_t sac_info[];

};

ПолС sac_state опрСдСляСт Ρ‚ΠΈΠΏ события, связанного с ассоциациСй. Оно ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния:

 β–‘ SCTP_COMM_UP β€” создана новая ассоциация. Поля входящих ΠΈ исходящих ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (inbound_streams ΠΈ outbound_streams) говорят ΠΎ Ρ‚ΠΎΠΌ, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² доступно Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… направлСниях. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации позволяСт Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ со стСком SCTP;

 β–‘ SCTP_COMM_LOST β€” ассоциация Π·Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ€ΠΎΠ³Π° нСдоступности (Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ количСство Ρ€Π°Π· Π±Ρ‹Π» ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚) ΠΈΠ»ΠΈ собСсСдник Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ассоциации (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° сокСта SO_LINGER ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ sendmsg с Ρ„Π»Π°Π³ΠΎΠΌ MSG_ABORT). ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² ΠΏΠΎΠ»Π΅ sac_info;

 β–‘ SCTP_RESTART β€” собСсСдник ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Π΅Π½. НаиболСС Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ этого увСдомлСния Π±Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· строя ΠΈ пСрСзапуск собСсСдника. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ пСрСзапускС эти значСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ;

 β–‘ SCTP_SHUTDOWN_COMP β€” Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ соСдинСния, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ локальной ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ shutdown ΠΈΠ»ΠΈ sendmsg с Ρ„Π»Π°Π³ΠΎΠΌ MSG_EOF). ПослС получСния этого сообщСния сокСт Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ собСсСднику;

 β–‘ SCTP_CANT_STR_ASSOC β€” собСсСдник Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ установлСния ассоциации.

ПолС sac_error содСрТит ΠΊΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ошибок ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SCTP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ привСсти ΠΊ измСнСнию состояния ассоциации. Поля sac_inbound_streams ΠΈ sac_outbound_streams говорят ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π±Ρ‹Π»ΠΎ согласовано Π²ΠΎ врСмя установки ассоциации. ПолС sac_assoc_id содСрТит ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ сокСта, Ρ‚Π°ΠΊ ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… увСдомлСниях. НаконСц, ΠΏΠΎΠ»Π΅ sac_info ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ свСдСния. НапримСр, Ссли ассоциация Π±Ρ‹Π»Π° Ρ€Π°Π·ΠΎΡ€Π²Π°Π½Π° собСсСдником Π² связи с ошибкой, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΊΠΎΠ΄ этой ошибки Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΠΎΠ»Π΅ sac_info.

β–  SCTP_PEER_ADDR_CHANGE Π­Ρ‚ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· адрСсов собСсСдника. ИзмСнСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ Π² ΠΎΡ‚ΠΊΠ°Π·Π΅ (отсутствии подтвСрТдСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° этот адрСс Π΄Π°Π½Π½Ρ‹Ρ…), Π»ΠΈΠ±ΠΎ Π² восстановлСнии (ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Π²ΡˆΠ΅Π³ΠΎ Ρ€Π°Π½Π΅Π΅ адрСса). Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

struct sctp_paddr_change {

 u_int16_t spc_type;

 u_int16_t spc_flags;

 u_int32_t spc_length;

 struct sockaddr_storage spc_aaddr;

 u_int32_t spc_state;

 u_int32_t spc_error;

 sctp_assoc_t spc_assoc_id;

};

ПолС spc_aaddr содСрТит адрСс собСсСдника, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связано Π΄Π°Π½Π½ΠΎΠ΅ событиС. ПолС spc_state ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, пСрСчислСнных Π² Ρ‚Π°Π±Π». 9.3.


Π’Π°Π±Π»ΠΈΡ†Π° 9.3. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ состоянии адрСса собСсСдника

spc_state Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SCTP_ADDR_ADDED АдрСс Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊ ассоциации SCTP_ADDR_AVAILABLE АдрСс доступСн SCTP_ADDR_CONFIRMED АдрСс ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ ΠΈ считаСтся Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ SCTP_ADDR_MADE_PRIM АдрСс сдСлан основным SCTP_ADDR_REMOVED АдрСс ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· списка адрСсов ассоциации SCTP_ADDR_UNREACHABLE АдрСс нСдоступСн

Π”Π°Π½Π½Ρ‹Π΅, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π½Π° нСдоступный (SCTP_ADDR_UNREACHABLE) адрСс, Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ адрСс. НСкоторыС состояния доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… рСализациях SCTP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ (Π² частности, SCTP_ADDR_ADDED ΠΈ SCTP_ADDR_REMOVED).

ПолС spc_error содСрТит ΠΊΠΎΠ΄ ошибки, Π΄Π°ΡŽΡ‰ΠΈΠΉ большС свСдСний ΠΎ событии, Π° ΠΏΠΎΠ»Π΅ spc_assoc_id, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации.

β–  SCTP_REMOTE_ERROR

БобСсСдник ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ сообщСниС ΠΎΠ± ошибкС. Π’Π°ΠΊΠΈΠ΅ сообщСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Π΅ состояния ассоциации. Если это ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, вся сбойная порция Π΄Π°Π½Π½Ρ‹Ρ… пСрСдаСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π² сСтСвом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

struct sctp_remote_error {

 u_int16_t sre_type;

 u_int16_t sre_flags;

 u_int32_t sre_length;

 u_int16_t sre_error;

 sctp_assoc_t sre_assoc_id;

 u_int8_t sre_data[];

};

ПолС sre_error содСрТит ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибки ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° SCTP; sre_assoc_id β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации, a sre_data β€” ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΡƒΡŽ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² сСтСвом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

β–  SCTP_SEND_FAILED

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ собСсСднику, возвращаСтся ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŽ Π² этом ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ. Π—Π° Ρ‚Π°ΠΊΠΈΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ слСдуСт ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡ‚ΠΊΠ°Π·Π΅ ассоциации. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв доставка сообщСния оказываСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΎΡ‚ΠΊΠ°Π·Π° ассоциации. Если ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ частичной надСТности SCTP, сообщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ ΠΈ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΡ‚ΠΊΠ°Π·Π° ассоциации Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Π”Π°Π½Π½Ρ‹Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ с этим ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

struct sctp_send_failed {

 u_int16_t ssf_type;

 u_int16_t ssf_flags;

 u_int32_t ssf_length;

 u_int32_t ssf_error;

 struct sctp_sndrcvinfo ssf_info;

 sctp_assoc_t ssf_assoc_id;

 u_int8_t ssf_data[];

};

ПолС ssf_flags ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

 β–‘ SCTP_DATA_UNSENT β€” сообщСниС Π½Π΅ Π±Ρ‹Π»ΠΎ послано собСсСднику (ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС Π΄ΠΎ истСчСния Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ);

 β–‘ SCTP_DATA_SENT β€” сообщСниС Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π½ΠΎ собСсСдник Π½Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ» Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅. БобСсСдник ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС, Π½ΠΎ ΠΎΠ½ Π½Π΅ смог ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

Π­Ρ‚Π° Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сущСствСнной для ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ восстановлСнии соСдинСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ дСйствия Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΎ принято ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ сообщСниС ΠΈΠ»ΠΈ Π½Π΅Ρ‚. ПолС ssf_error ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки, относящСйся ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡŽ, ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ. ПолС ssf_info содСрТит свСдСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ядру ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°, контСкст ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅). ПолС ssf_assoc_id содСрТит ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации, Π° Π² ΠΏΠΎΠ»Π΅ ssf_data помСщаСтся нСдоставлСнноС сообщСниС.