Сокеты во FreeBSD...

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
SoeR
рядовой
Сообщения: 20
Зарегистрирован: 2007-06-08 14:17:52

Сокеты во FreeBSD...

Непрочитанное сообщение SoeR » 2007-06-08 14:31:38

Приветствуюб уважаемые админы =)

Вот прочитал статью на вашем сайте о написании демона работающего с сокетами
Но почему-то не компилит

Код:

Код: Выделить всё

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <syslog.h>
#include <signal.h>

class tcpdaemon
{
  protected:
    void daemonize();
    void mainloop();
    void operate(int fd);
    static void signalhandler(int signum);
  public:
    void exec();
};

void tcpdaemon::signalhandler(int signum)
{
  waitpid(0, 0, WNOHANG);
}

void tcpdaemon::daemonize()
{
  struct sigaction sa;
  print_f("Welcome to Playback Price Server. Server start OK!\n");
  int pid = fork();
  switch(pid)
  {
    case 0:
    setsid();
    chdir("/");
    close(0);
    close(1);
    close(2);
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = &sighandler;
    sigaction(SIGCHLD, &sa, 0);
    exit(0);
    case -1:
      print_f("Fork error...\n");
      break;
    default
      print_f("OK. PID=%d\n", pid);
      break;
   }
}

void tcpdaemon::mainloop()
{
  int sockfd, fd;
  struct sockaddr_in sa;
  socklen_t n;
  sockfd = socket(PF_INET, SOCK_STREAM, 0);
  if(sockfd != -1)
  {
    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
    sa.sin_port = htons(21867);
    if(bind(sockfd, (struct sockaddr *)&sa, sizeof sa) != 1)
    {
      while(1)
      {
        if(!listen(sockfd, 50))
        {
          n = sizeof sa;
          if((fd = accept(sockfd, (srtuct sockaddr *)&sa, &n)) != -1)
          {
            print_f("Connection from %s", inet_ntoa(sa.sin_addr));
            if(!fork)
            {
              operate(fd);
            }
          }
        }
      }
    }
  }
}

void tcpdaemon::operate(int fd)
{
  char c;
  bool finished;
  string smd, answer;
  finished = false;
  write(fd, answer.c_str(), answer.size());
  while(!finished)
  {
    cmd = answer = "";
    while(!finished)
      finished = read(fd, &c, 1) != 1;
    if(c == '\n')
      break;
    else if(c != '\r')
      cmd += c;
    if(!finished && !cmd.empty())
    {
      if(cmd == "info")
        answer = "Welcome to PlayBack Price Server...";
      else if(cmd == "quit")
      {
        shutdown(fd, 2);
        close(fd);
        finished = true;
      }
    }
  }
  if(!finished && !answer.empty())
  {
    answer += "\n";
    write(fd, answer.c_str(), answer.size());
  }
  exit(0);
}

void tcpdaemon::exec()
{
  daemonize();
}


int main()
{
  tcpdaemon daemon;
  daemon.exec();
  return 0;
};
Компилю так:
сс -o serv serv.c

Выдаёт следующие ошибки:

Код: Выделить всё

  serv.c:11: error: syntax error before "tcpdaemon"
serv.c:12: error: syntax error before '{' token
serv.c:18: error: syntax error before ':' token
serv.c:20: error: syntax error before '}' token
Вопрос: На что ругается и как исправить?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
bakake
сержант
Сообщения: 265
Зарегистрирован: 2006-11-21 14:04:58

Непрочитанное сообщение bakake » 2007-06-09 6:29:01

Как ни странно, но компилятор по расширению файла смотрит (по дефолту) кто у него на входе -- ц или ц++. Попробуйте поменять расширение с .c на .cpp

SoeR
рядовой
Сообщения: 20
Зарегистрирован: 2007-06-08 14:17:52

Непрочитанное сообщение SoeR » 2007-06-13 20:48:07

Всё нормуль =)) Разобрался... Оказалось, что в файлах с расширением .c нельзя писать классы, т.к. это си... Поменял расширение на .cpp и скомпилел g++ -o serv serv.cpp и всё скомпилелось :) Что поделаешь, только начинаю :)

100kg
ст. сержант
Сообщения: 393
Зарегистрирован: 2006-05-18 14:01:32

Re: Сокеты во FreeBSD...

Непрочитанное сообщение 100kg » 2007-10-28 20:20:16

привет! вот подзагрузился я!

пожалуиста поставь коментарии! как бы интуитивно понимаю, но все таки укажи где конструктор, опеши хоть немного заголовки в 2 словах, члены-функции private и аргументы каторые принимает, а то осилил только создания обьекта класса и запуск его в main :)

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2007-10-29 23:05:57

100kg писал(а):привет! вот подзагрузился я!

пожалуиста поставь коментарии! как бы интуитивно понимаю, но все таки укажи где конструктор, опеши хоть немного заголовки в 2 словах, члены-функции private и аргументы каторые принимает, а то осилил только создания обьекта класса и запуск его в main :)
ага... доберусь до офиса и попробую пояснить )
Главное в жизни здоровье и любовь, остальное я все куплю.

Гость
проходил мимо

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Гость » 2008-02-21 15:45:57

Добрый день.
Может немого не в тему но...
Почему, когда я добавляю в работающий С код строку:
#include <sys/systm.h>
или
#include <sys/kernel.h>
компилер в этих файлах не находит некоторые типы данных, и гдето определенные функции.
Исходные тексты системы установленны. И вообще установлено всё, полная установка. Версия FreeBSD 6.2.
Компилирую я просто:
gcc -a hello.c hello

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2008-02-21 19:15:08

Гость писал(а):Добрый день.
Может немого не в тему но...
Почему, когда я добавляю в работающий С код строку:
#include <sys/systm.h>
или
#include <sys/kernel.h>
компилер в этих файлах не находит некоторые типы данных, и гдето определенные функции.
Исходные тексты системы установленны. И вообще установлено всё, полная установка. Версия FreeBSD 6.2.
Компилирую я просто:
gcc -a hello.c hello
Телепаты в отпуске :) (Я на самом деле счас с ноутбука пишу так как нахожусь на отдыхе в загородном профилактории :)
А по теме - давай вывод ошибок сюда. разберемся. Ибо то что ты говоришь что что то не находит "некоторые" типы.. лично для меня ни о чем не говорит.
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35147
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Alex Keda » 2008-02-22 0:19:21

как там эппл?
========
хороший профилакторий - с инетом..
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2008-02-22 1:00:52

lissyara писал(а):как там эппл?
========
хороший профилакторий - с инетом..
Эппл на офисе остался я подумал неразумно брать 2 ноута на отдых :)))
А профилакторий построили наши банкиры для себя, отдых заказывали за 2 месяца, потому что тут аншлаг обычно ))))
на 12 дней брали путевки - потому как если на 12 и более дней берешь путевку в стоимость входит прием врачей процедуры питание 4 раза в день итд итп...
Так что я утром иду на массаж, потом мне спину греют потом ультразвук и ингаляции для горла..фитобар с травками вкучными и полезными...аквапарк... вечером бильярд и бар...есть корт спортзалы итд итп )))) И все это удовольстви всего 500 баксов за 12 дней ))))
Плюс стоянка для машины и возможность ухаживать за ней мыть полировать итд итп ))))
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35147
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Alex Keda » 2008-02-22 1:06:55

я бы не смог.
мне постоянно надо что-делать.
немогу иначе
Убей их всех! Бог потом рассортирует...

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение zingel » 2008-03-02 1:22:32

Используй вот так:

#include <systm.h>


p.s. и GCC обнови.
Z301171463546 - можно пожертвовать мне денег

fr33man
сержант
Сообщения: 218
Зарегистрирован: 2006-09-04 17:41:27
Откуда: Москва
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение fr33man » 2008-03-13 23:56:22

lissyara писал(а):я бы не смог.
мне постоянно надо что-делать.
немогу иначе
слава богу, я не один такой.... Мне всегда погано, когда ничего не делаю. ))
WBR Озеров Василий aka fr33man

ark
рядовой
Сообщения: 20
Зарегистрирован: 2008-04-13 18:10:20
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение ark » 2008-04-13 18:15:50

такая же фигня... не могу на месте сидеть...

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

дак вот... нужно написать сервер на фре, но с возможностью работы с TCP пакетами а не только с текстовой информацией
то есть передавать данные в пакетах в побайтно а не в тексотовом формате
кто нибудь занимался чем то подобным на фре?

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2008-04-13 20:21:43

ark писал(а):такая же фигня... не могу на месте сидеть...

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

дак вот... нужно написать сервер на фре, но с возможностью работы с TCP пакетами а не только с текстовой информацией
то есть передавать данные в пакетах в побайтно а не в тексотовом формате
кто нибудь занимался чем то подобным на фре?
RAW Socket - гугли и будет тебе счастье.
Главное в жизни здоровье и любовь, остальное я все куплю.

ark
рядовой
Сообщения: 20
Зарегистрирован: 2008-04-13 18:10:20
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение ark » 2008-04-14 8:39:49

ну зачем же сразу на гугль отправлять))) про существование гугля я итак знал))
а сюда написал с целью получить примеры реализации - делал подобное кто нибудь?

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2008-04-14 20:54:02

ark писал(а):ну зачем же сразу на гугль отправлять))) про существование гугля я итак знал))
а сюда написал с целью получить примеры реализации - делал подобное кто нибудь?
Поточнее опиши задачу, попробуем разобраться.
Я работал с RAW но к сожалению показать реализацию не могу - коммерческая разработка :)
А вообще инфы куча по этому делу, вопросы по ходу конечно возникают но ничего сверхъестественного нет :)

Могу еще сказать что при написании я глядел в исходники tcpdump-а очень помогло :)
Главное в жизни здоровье и любовь, остальное я все куплю.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35147
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Alex Keda » 2008-04-14 21:40:18

Fastman писал(а):Могу еще сказать что при написании я глядел в исходники tcpdump-а очень помогло :)
однако, в этом случае исходники ты вывалить обязан =)))
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Fastman
ст. лейтенант
Сообщения: 1236
Зарегистрирован: 2006-07-07 10:20:38
Откуда: Минск. РБ

Re: Сокеты во FreeBSD...

Непрочитанное сообщение Fastman » 2008-04-15 10:24:36

lissyara писал(а):
Fastman писал(а):Могу еще сказать что при написании я глядел в исходники tcpdump-а очень помогло :)
однако, в этом случае исходники ты вывалить обязан =)))
Я ж смотрел как правильно делать а не тупо копи-паст )))
Главное в жизни здоровье и любовь, остальное я все куплю.

ark
рядовой
Сообщения: 20
Зарегистрирован: 2008-04-13 18:10:20
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение ark » 2008-04-15 11:01:11

ну тогда ты тем более обязан поделится исходниками! :D

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Сокеты во FreeBSD...

Непрочитанное сообщение zingel » 2008-05-03 14:38:19

по raw-сокетам инфорация (c примерами) настолько скудна, что я видел её только в "UNIX-Разработка сетевый приложений" (Стивенс, Рудофф)

выкладывайте, действительно....
Z301171463546 - можно пожертвовать мне денег

red
проходил мимо

Re: Сокеты во FreeBSD...

Непрочитанное сообщение red » 2008-11-20 20:29:33

Кто-то смог это скопилиить gcc4 ?
tsrmad.cpp: In member function 'void tcpdaemon::daemonize()':
tsrmad.cpp:50: error: 'sighandler' was not declared in this scope
tsrmad.cpp:57: error: expected `:' before 'printf'
tsrmad.cpp: In member function 'void tcpdaemon::operate(int)':
tsrmad.cpp:99: error: 'string' was not declared in this scope
tsrmad.cpp:99: error: expected `;' before 'cmd'
tsrmad.cpp:100: error: expected `;' before 'answer'
tsrmad.cpp:102: error: 'answer' was not declared in this scope
tsrmad.cpp:105: error: 'cmd' was not declared in this scope

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Сокеты во FreeBSD...

Непрочитанное сообщение paradox » 2008-11-20 21:07:07

если нужно могу скомпилить

red
проходил мимо

Re: Сокеты во FreeBSD...

Непрочитанное сообщение red » 2008-11-20 21:28:23

очень нужно - попробуй если получится расскажи как получилось

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Сокеты во FreeBSD...

Непрочитанное сообщение paradox » 2008-11-20 21:33:06

получиться однозначно

можно вашу

Код: Выделить всё

uname -a
?