The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема Socket select "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема Socket select "  
Сообщение от niknik email(??) on 11-Окт-06, 18:07 
Привет ALL

Возникла проблема с использованием функции select. Пишу tcp сервер с использованием неблокируемых сокетов. Исходный текст такой

for(;;) {
      client=sizeof(cliaddr);
    FD_ZERO(&rset);
    FD_ZERO(&wset);
    FD_SET(listenfd,&rset);
    FD_SET(listenfd,&wset);
    if (f_cli==1) {
        FD_CLR(connfd,&wset);
        FD_SET(connfd,&rset);
        FD_SET(connfd,&wset);
        f_ex=1;
    }
    timeo.tv_sec=5;
    timeo.tv_usec=0;
    nready=select(maxfd+1,&rset,NULL,NULL,&timeo);
    if(errno!=0) { printf("Error select "); fflush(stdout); }    
    if (nready<0) {  printf("Error   select ");  fflush(stdout);  exit(1);  }
    if (nready==0) { fff=0; } else {     
    if(FD_ISSET(listenfd,&rset)) {  
        if (f_cli==0) {
            connfd=accept(listenfd,NULL,NULL);  
            set_nonblocking(connfd);
            setsockopt(connfd, SOL_SOCKET, SO_REUSEADDR, &yes,
            sizeof(yes));
            if (connfd>maxfd) { maxfd=connfd; }
            f_cli=1;
        }
    }
    if(FD_ISSET(listenfd,&wset)==0) {      printf("write listen fd\n");  fflush(stdout);     
                    
    }
    if (f_ex==1) {
    
        if(FD_ISSET(connfd,&rset)) {
               if ((Readline(connfd,line,255))<=0) {
                    printf("close");
                    fflush(stdout);
                    close(connfd);  
                    exit(1);  }
        printf("%s",line);
        fflush(stdout);
    if(FD_ISSET(connfd,&wset)==0) {  
            printf("."); fflush(stdout);
            FD_CLR(connfd,&wset);    }
        
    }
При работе сервера запись в сокет не происходит. Но переодически FL_ISSET(connfd,&wset) - становится валидным. Постоянно идет вывод на экран символов  .........

В чем может быть проблема, подскажите ПЛЗ.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Проблема Socket select "  
Сообщение от wwwdev (ok) on 12-Окт-06, 04:21 
>Возникла проблема с использованием функции select. Пишу tcp сервер с использованием неблокируемых
>сокетов. Исходный текст такой

То ли кода мало, то ли совсем не то что-то делается. Скажем, изначально в maxfd непонятно что находится. Потом, неясно, как сервер будет обслуживать нескольких клиентов. Наконец, wset инициализируется, но в select() не передается.

>При работе сервера запись в сокет не происходит. Но переодически FL_ISSET(connfd,&wset) -
>становится валидным. Постоянно идет вывод на экран символов  .........
>
>В чем может быть проблема, подскажите ПЛЗ.

В какой сокет запись не происходит ? Сервер, судя по коду, никуда не пишет.

Вот несколько нехитрых примеров на эту тему, посмотри http://nonblock.tripod.com

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Проблема Socket select "  
Сообщение от niknik email(??) on 12-Окт-06, 17:27 
Спасибо за ссылку. Уже все работает просто тупил.

!Если флаг активен можно производить запись. По тому он у меня и вызывался код.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру