![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Здраствуйте. Хочу продолжить тему по ТСП протоколу. Вот моя функция которая создаёт сокет:
Что то с биндом не так.. ![]() error C2660: 'bind' : function does not take 2 arguments Спасибо. P.S. htonl(INADDR_ANY) что это? ![]() Это сообщение отредактировал(а) Sergio - 21.1.2007, 00:32 |
|||
|
||||
nworm |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: нет Всего: 8 |
![]() |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: нет Всего: 8 |
||||
|
||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
nworm, вот написал так:
Ошибка: error C2143: syntax error : missing ')' before ';' |
|||
|
||||
nworm |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 502 Регистрация: 22.10.2005 Репутация: нет Всего: 8 |
пробый так
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
ну так он тебе и написал:
"Поставь, пожалуйста, скобку перед ;" ))) -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Хотел проверить возращаемые ошибки Вызвал две "прослушки" сразу но они вернули два нуля. Почему? А должно ведь вернуть ноль и значение ошибки.
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Sergio, а почему обязательно ошибку?
вот, что в man listen сказано
-------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Есть ещё такое возращение:
|
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
сейчас посмотрим
Это сообщение отредактировал(а) SparF - 21.1.2007, 09:33 -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
SparF |
|
||||||||||||||||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Sergio, а ты под какую ОС пишешь? Я про то, что в мсдн нашел про WSAEISCONN =)
а потом решил покопаться в Линухе на эту тему, результаты меня не только откровенно порадовали, но еще и удивили :hehe - зацепило)) 1. в Линухе как факт отсутствует ошибка WSAEISCONN, а есть EISCONN 2. EISCONN вызывается в случае: для функции connect:
аналогично для send_msg:
И других вариантов встретить его в socket.c нет :p 3. сам же код ошибки (Linux/include/asm-generic/errno.h)
4. Что же касается работы конкретно функции listen то вызывается одна из asmlinkage long sys_socketcall(Linux/net/socket.c), как и полностью все функции работы с сокетами вот кусок кода (нас интересуют возвращаемые ошибки)
по возможным ошибкам: (include/asm-generic/errno-base.h)
с первой ошибкой тут все ясно(первая - в порядке проверки, а не объявления в errno-base.h)) вторая же возникает если некорректно отрабатывает копирование блока данных из пространства пользователя (тоже вряд ли имеет отношение к нашему вопросу ))) если смотреть дальше по коду(Linux/kernel/auditsc.c), то единсвенное, что может вернуть audit_socketcall это
значит нам опять же не сюда))) остается только одна функция, которая как-то может повлиять на ошибку: sys_listen (net/socket.c, line 1362) она совсем маленькая:
тут только два варианта, откуда может появиться ошибка первый: security_socket_listen (include/linux/security.h, line 2703)
по комменту понятно - проверяет права на доступ (опять же - похоже, что "не та степь" по отношению к нашему вопросу) второй: (net/tipc/socket.c, line 1299):
как видишь она может вернуть только две ошибки (include/asm-generic/errno.h, line 68):
это была первая, EINVAL описана выше. при этом первая вызывается если sock->state== (Linux/net/tipc/socket.c):
по комменту ясно, что это "если сокет (в силу каких-то причин) не может быть подключен" а вторая если sock->state!= (Linux/include/linux/net.h)
опять же по комменту видно, что если сокет уже к чему-то подключен Коды ошибок, указанных мной ранее из мана в коде listen я так и не нашел - люди, не судите строго :rolleyes Так что, имхо, не все так просто, как хотелось бы, но и усложнять лишний раз не надо. Думаю, что этого достаточно, чтобы понять: в зависимости от ОС реализация вроде бы "стандартных" функций может меняться))) как же это сделано в винде - а хз)) не знаю ( PS http://lxr.linux.no/ однозначно рулит :inlove ковырялся в исходниках 2.6.17.13 гы...прикольно :happy
Так что забей ))) исходить надо из того, что есть если же пишешь под винду - то тайна остается покрыта мраком :( тут надо спрашивать у продвинутых виндузойдов, коим я не являюсь :( А, вот еще - на опытных прогах я все это не проверял, возможно, что в реальности еще что-то накладывается. Это сообщение отредактировал(а) SparF - 21.1.2007, 11:01 -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
drZmeu |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 22.11.2006 Репутация: 1 Всего: 1 |
Народ да посоветуйте ему книжку какую нить...
Sergio -> С++ Глазами хакера... В нете скачай примерный вес 3 мегобайта... Там много чего про сокеты и т.д Удачи тебе. --------------------
[code=html]<table bgcolor='#0' width='69'><tr align='center' bgcolor='#0'><td><font size='6' face='cursive' color='#ffffff'><b>A</b></font></td></tr><tr align="center" bgcolor="#0">[/code] |
|||
|
||||
SparF |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
мда....а то я что-то размахнулся....
вот ссылка, которая меня ну очень в свое время порадовала (вообще класс!) http://beej.us/guide/bgnet/ -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
|||
|
||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Почитал я книгу. И вот что у меня получилось (не очень получилось
![]()
Простите за нечитабельность(писал в 4 утра). SparF, я пишу под виндовс. P.S. Подскажите где в структуре sockaddr_in указывается IP. Спасибо зарание. |
|||
|
||||
SparF |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 14.9.2006 Где: Санкт-Петербург/М осква Репутация: нет Всего: 18 |
Sergio, доки читать надо
![]()
иначе говоря accept возвращает сокет с которого нужно осуществлять чтение
кроме этого - если ты оставишь все как есть, то accept перепишет твою AdressInfo информацией об удаленном клиенте -- туда пишутся данные об удаленной машине Мой тебе совет, досконально изучи пример клиент/сервера Добавлено @ 18:14 И не пиши код, до тех пор пока ты не знаешь что означает каждый символ из примитивного примера и как этот пример работает. -------------------- Люди, не пользуйтесь пиратским программным обеспечением - переходите на Linux! |
||||
|
|||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Прочитал я в доках, что после виполнения функции accept(mySocket, (struct sockaddr *)&their_addr, &sin_size)), сервер сохраняет адрес клиента в структуре their_addr. Помогите найти где именно... А то я не нашёл. Спасибо.
Думал что здесь (their_addr.sin_addr.s_addr) но выводить какоё-то непонятное число ![]() Это сообщение отредактировал(а) Sergio - 22.1.2007, 00:28 |
|||
|
||||
ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Показывай весь код. SparF, не надо смешивать Windows и *nix. В Windows, например, accept возвращает INVALID_SOCKET.
Это сообщение отредактировал(а) ptr - 22.1.2007, 08:07 -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Возникла проблема. Как передать структуру? Тоесть я хочу передать пакет где будет:
имя клиента сообщение Ip клиента Сначала думал это всё запихать в массив чаров и передавать, но потом передумал, так как надо ставить какие-то ограждения(для сортировки на сервере): (/сообщение/имя клиента/Ip клиента/) а я не хочу ограничивать пользователя какими-то символами. Что мне делать? Как мне быть? ![]() Это сообщение отредактировал(а) Sergio - 27.1.2007, 00:46 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
по сети? тогда длины строк передавай (кол-во букф) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
witex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 1 Всего: 4 |
привельно Ромик говорит! Структуру передаёшь через массив чаров, а принимающая сторона опять её превращает в структуру, вот и всё!
Так и файлы передаются и всё подрят! Сам вначале парился! Но тут на форуме и решили проблему! --------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
Sergio |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: нет Всего: 1 |
Вот что я написал:
Потом:
Какая-то ошибка ![]() И еще вопрос: как принимать структуру? Что чему присваивать? |
||||
|
|||||
witex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 1 Всего: 4 |
выше же написал! --------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |