PLEX86  x86- Virtual Machine (VM) Program
 Plex86  |  CVS  |  Mailing List  |  Download  |  Linux  |  Newsgroups

epoll problem


Your Ad Here

Your Ad Here

I programmed simple tcp server using nonblocking sockets and epoll. But I am facing some problems.

Filesystems created identically, but have different sizes
I've inherited a build process that creates a filesystem-in-a-file using a bash script which goes, in part, like this: dd if=-dev-zero of=fsfile bs=1024 count=4096 mke2fs -F fsfile...

1. I can recv from eventsi.data.fd but I can't send any data over eventsi.data.fd

2. When I make multiple connections at once (say 100) I get segmentation fault...

What am I doing wrong?

(you can find source code that making multiple connections under topic "multi-thread server, pthreads, sleep". it is test.c)

source code is here

-------------- epollserver.c ------------------ $ cc epollserver -o epollserver --------------------------------------------------

#define MAXCLIENT 101 #define PORT 3355 #define DEBUG

int listenfd;

void nonblock(int sockfd) { int opts; opts = fcntl(sockfd, FGETFL); { perror("fcntl(FGETFL)-n"); exit(1); } opts = (opts ONONBLOCK); { perror("fcntl(FSETFL)-n"); exit(1); } }

int main() { int epfd; struct epollevent *events; struct epollevent ev; struct sockaddrin srv; int clifd; int i; int n; int res; char buffer1024; { perror("sockfd-n"); exit(1); }

bzero(&srv, sizeof(srv)); srv.sinfamily = AFINET; srv.sinaddr.saddr = INADDRANY; srv.sinport = htons(PORT);

{ perror("bind-n"); exit(1); } listen(listenfd, 1024);

epfd = epollcreate(MAXCLIENT); if(!epfd) { perror("epollcreate-n"); exit(1); } ev.events = EPOLLIN EPOLLERR EPOLLHUP; ev.data.fd = listenfd; { perror("epollctl, adding listenfd-n"); exit(1); }

for( ; ; ) { res = epollwait(epfd, events, MAXCLIENT, 0); { if(eventsi.data.fd == listenfd) { clifd = accept(listenfd, NULL, NULL); { nonblock(clifd); ev.events = EPOLLIN EPOLLET; ev.data.fd = clifd; { perror("epollctl ADD-n"); exit(1); } } } else { n = recv(eventsi.data.fd, buffer, 1023, 0); if(n == 0) { #ifdef DEBUG printf("%d closed connection-n", eventsi.data.fd); epollctl(epfd, EPOLLCTLDEL, eventsi.data.fd, NULL); #endif } { #ifdef DEBUG printf("%d error occured, errno: %d-n", eventsi.data.fd, errno); #endif } else { #ifdef DEBUG printf("%d data received: %s-n", eventsi.data.fd, buffer); bzero(&buffer, strlen(buffer)); #endif send(eventsi.data.fd, buffer, strlen(buffer), 0); } } } } return 0; }



Your Ad Here

List | Previous | Next

Filesystems created identically, but have different sizes

Linux groups from Newsgroups

The #1 Usenet Provider on the Internet

news server question 3187