Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Демон на С++


Автор: Diesel Draft 14.5.2006, 02:31
Хочу написать веб чат. Сначала думал что напишу демона на PHP, но решил что С++ лучше. Сервер мой, потом мне ничего не мешает.

Меня интересует как можно создать и открыть сокет С++, а также слушать его. Приложение должно висеть в фоне, потому не должно быть никакой формы.
 

Автор: bsa 15.5.2006, 17:54
Код
socket_fd = socket(PF_INET, SOCK_STREAM, 0);
sockaddr_in sa_name;
sa_name.sin_family = AF_INET;
sa_name.sin_port = 12345;
sa_name.sin_addr = 0x00000000;
bind(socket_fd, (struct sockaddr*)&sa_name, SIN_LEN(&sa_name) );
listen(socket_fd, 99999);
cl_socket = accept(socked_fd, 0, 0);
 

Автор: Spalax 16.5.2006, 07:58
Цитата(bsa @ 15.5.2006,  17:54)
Код
socket_fd = socket(PF_INET, SOCK_STREAM, 0);
sockaddr_in sa_name;
sa_name.sin_family = AF_INET;
sa_name.sin_port = 12345;
sa_name.sin_addr = 0x00000000;
bind(socket_fd, (struct sockaddr*)&sa_name, SIN_LEN(&sa_name) );
listen(socket_fd, 99999);
cl_socket = accept(socked_fd, 0, 0);

Ну а если ты так откроешь сокет то если вдруг ты будешь использовать много процесорность и процес создавший такой сокет упадёт. Nulf придеться ждать ну около 5 минут пока сокет закроеться..... тоесть быстренько ребутнуть твоего демона не удасться ..... мой совет использовать чють по другому использовать
 
Код

  int lfd = 0;
  struct linger on;
  struct sockaddr_in german_socket;
  struct sockaddr *sp;

        sp = (struct sockaddr *)&german_socket;
    lfd = socket(AF_INET,SOCK_STREAM,0);
         f (lfd == -1) {
      printf("cannot open remote socket");
    }

    german_socket.sin_family = AF_INET; 
    german_socket.sin_addr.s_addr = htonl(INADDR_ANY); // Значит что будет слушать все айпишники 
    german_socket.sin_port = htons(8080); // На порту 8080
    
    setsockopt(lfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on));    // А ето добавлено для удобства =))        

    while (bind(lfd,sp,sizeof(german_socket))==-1) {
           printf("Cannot bind port will sleep ~ 15 sec\n");
                    sleep(15);
    }  

    if (listen(lfd,1024) == -1) {
          printf("cannot listen remote port");
          exit(0);
    }    
 

Автор: Diesel Draft 16.5.2006, 12:19
сенк бду розбератса
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)