LINUX.ORG.RU

Вопрос по SCTP


0

1

Всем привет, я использую qt в качестве ide в качестве компилятора gcc, проблема такая: подключаю как и везде написано -

#include <sys/types.h> #include <sys/socket.h> #include <netinet/sctp.h>

int main() { sctp_recvmsg(/*параметры*/); }

когда пишу функции начинающиеся на sctp_(что-нибудь) ide радостно автодополняет и тд. но на момент компиляции пишет что все эти функции не существуют, например: error: undefined reference to `sctp_recvmsg' error: undefined reference to `sctp_opt_info' В инете искал но ничего по такой проблеме не нашел( мб плохо искал) подскажите что здесь не так? P.S. sctp.h небыло изначально, в инете нашел что он отдельно устанавливается:sudo apt-get install libsctp-dev lksctp-tools мб тут что не так?


линкуй с -lsctp.

полу-оффтоп: а что сейчас принято советовать топикстартерам для профилактики подобных вопросов?

последняя прочитанная мною на этот предмет книга — kernighan, pike «the unix programming environment», но вроде нынче она уже не в моде...

anonymous
()
Ответ на: комментарий от anonymous

Классика всегда в моде, у кого она не в моде, у того неправильная мода.

Begemoth ★★★★★
()

а оно что, через стандартные для сокетов send()/recv() не работает? :)

И да, как уже сказали, undefined reference - это когда линкер не может найти какой-то символ, значит скорей всего какая-то нужная библиотека не прилинкована

Harald ★★★★★
()
Ответ на: комментарий от anonymous

у меня ещё вопрос, ну чтоб тему не делать новую: как получить id ассоциации? sctp_opt_info с параметром SCTP_PEER_ADDR_PARAMS всегда 0 возвращает и spp_assoc_id=0, этот ид мне нужен чтобы заполнить структуру статуса, потом я вызываю туже sctp_opt_info с параметро SCTP_STATUS но ошибка вылетает, вторым параметром я ей указываю полученный ид но он всегда блин равен 0. Да и в первом вызове вторым параметром я тоже 0 передаю.

Onito
() автор топика

использую qt в качестве ide

если это подразумевает не просто редактор, но и подтаскивание кутишных проектов, то у них там свои тараканы с подключением библиотек. гуглить доки на Qt, про подключение библиотек, соответственно.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

использую qt в качестве ide

если это подразумевает не просто редактор

фраза «использую qt в качестве ide» не может подразумевать ничего, кроме дол******ма.

то у них там свои тараканы с подключением библиотек. гуглить доки на Qt, про подключение библиотек,

Пример тараканов?

Stil ★★★★★
()
Ответ на: комментарий от Stil

ну я думаю очевидно что если qt в качестве ide, то это значит что у меня только qt-creator. Что тут не так?

Onito
() автор топика
Ответ на: комментарий от Iron_Bug

нет, у меня только редактор кода

Onito
() автор топика
Ответ на: комментарий от greek_31

да кода нет в общем, вот это создаётся сокет: sock = socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP); вот тут запрашиваются параметры о собеседнике: memcpy(&s.spp_address,addr,addrlen); sctp_opt_info(sock,0,SCTP_PEER_ADDR_PARAMS, &s, &size); Побочный эффект этого вызова возвращение ид ассоциации(так по крайней мере пишут) но вот такой вывод показывает что ид всегда = 0, а со вторым параметром всё нормально cout << s.spp_assoc_id << ' ' << s.spp_pathmtu << endl;

Onito
() автор топика
Ответ на: комментарий от Onito

Что тут не так?

что Qt - это библиотека, а IDE называется Qt Creator, независимо от очевидности твоего поста

// но вообще это шиза, как и в случае QT. не обращай внимания.

Stil ★★★★★
()
Ответ на: комментарий от Stil

примеры тараканов - создание своего конфига, вместо makefile, например. причём конфиг этот довольно специфичен. ну и ещё препроцессинг кода - тоже таракан изрядный. просто когда я слышу про Qt - обычно люди имеют в виду Qt Creator. а это не просто среда для редактирования кода.
ну и так, чисто в разработке кутишные софтины неудобные и дико жрущие ресурсы. поэтому, если нет необходимости в использовании самой библиотеки, рекомендовать их никак нельзя.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

создание своего конфига, вместо makefile

ты про qmake (.pro) что-ли?

так Qt Creator поддерживает и cmake и, ЕМНИП, даже Makefile

ну и ещё препроцессинг кода - тоже таракан изрядный

а это о чем? о moc'е?

Qt Creator. а это не просто среда для редактирования кода.

зависит исключительно от твоих предпочтений. у меня он и просто редактором часто работает.

ну и так, чисто в разработке кутишные софтины неудобные и дико жрущие ресурсы. поэтому, если нет необходимости в использовании самой библиотеки, рекомендовать их никак нельзя.

ШТО?

Stil ★★★★★
()
Ответ на: комментарий от Onito

Я не совсем понял код, но, насколько я знаю, при SOCK_SEQPACKET id ассоциации может получить принимающая сторона. Из отправляющей стороны как получить id я не знаю.

Каждый вызов sctp_recvmsg() получает заполненый указатель на структуру sctp_sndrcvinfo. Что-бы магическим образом заработало, нужно подписаться на sctp_data_io_event в SCTP_EVENTS.

Естественно сокеты типа SOCK_STREAM могут получить id с принимающей и раздающей сторон.

Код клиента(отправителя) SEQPACKET: http://pastebin.com/xJyhfWd5

Код сервера(получатель) SEQPACKET: http://pastebin.com/1LPL8dAU

greek_31 ★★
()
Последнее исправление: greek_31 (всего исправлений: 1)
Ответ на: комментарий от greek_31

Ну и тащемто cat /proc/net/sctp/assocs показывает вообще всё.

greek_31 ★★
()
Ответ на: комментарий от greek_31

Вот все как ты написал я и делаю, а он выдает туже хрень: айпи ассоциации равен 0 во всех случаях

Onito
() автор топика
Ответ на: комментарий от Onito

Мой код УМВР. Смотри где разница между твоим и моим. Еще раз: на сегментных пакетах у меня работает принимающая сторона.

greek_31 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.