#include #include #include #include #include #include #include #include #include void handler(int sig, siginfo_t *extra, void *cruft) { if (sig == SIGIO) { fprintf(stderr,"signal: %d errno: %d fd: %d\n",extra->si_signo,extra->si_errno,extra->si_fd); } } int main(void) { int fd; int insock; int on = 1; socklen_t addrlen; struct sigaction sa; struct sockaddr_in addr_in; struct sockaddr_in addr_other; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask, SIGIO); sa.sa_sigaction = handler; sa.sa_flags = SA_SIGINFO; sigaction(SIGIO, &sa, NULL); addr_in.sin_family = AF_INET; addr_in.sin_port = htons(9753); addr_in.sin_addr.s_addr = htonl(INADDR_ANY); insock = socket(PF_INET,SOCK_STREAM,0); setsockopt(insock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); bind(insock, (struct sockaddr *) &addr_in, sizeof(addr_in)); listen(insock, 1); if ((fd = accept(insock,(struct sockaddr *) &addr_other, &addrlen)) == -1) {perror("fault");} fprintf(stderr,"fd is %d\n",fd); if (fcntl(fd, F_SETFL, fcntl (fd,F_GETFL) | O_NONBLOCK | O_ASYNC) == 1) {perror("fault");} if (fcntl(fd,F_SETOWN,getpid()) == -1) {perror("fault");} fprintf(stderr,"accepted connection\n"); do { } while(1); }