Привет 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) - становится валидным. Постоянно идет вывод на экран символов .........В чем может быть проблема, подскажите ПЛЗ.
>Возникла проблема с использованием функции select. Пишу tcp сервер с использованием неблокируемых
>сокетов. Исходный текст такойТо ли кода мало, то ли совсем не то что-то делается. Скажем, изначально в maxfd непонятно что находится. Потом, неясно, как сервер будет обслуживать нескольких клиентов. Наконец, wset инициализируется, но в select() не передается.
>При работе сервера запись в сокет не происходит. Но переодически FL_ISSET(connfd,&wset) -
>становится валидным. Постоянно идет вывод на экран символов .........
>
>В чем может быть проблема, подскажите ПЛЗ.В какой сокет запись не происходит ? Сервер, судя по коду, никуда не пишет.
Вот несколько нехитрых примеров на эту тему, посмотри http://nonblock.tripod.com
Спасибо за ссылку. Уже все работает просто тупил.!Если флаг активен можно производить запись. По тому он у меня и вызывался код.