#include #include #include #include #include #include #include #include #include int s; void sig(int n, siginfo_t *info, void *p) { if (info->si_code == SI_SIGIO) printf("\nsigio\n"); printf(" si_code : %d si_fd : %d\n\n", info->si_code, info->si_fd); } int main(void) { struct sigaction sa; struct sockaddr_in sad; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask, SIGIO); sa.sa_handler = 0; sa.sa_sigaction = sig; sa.sa_flags = SA_SIGINFO | SA_NOMASK; sa.sa_restorer = 0; sigaction(SIGIO, &sa, 0); s = socket(AF_INET, SOCK_STREAM, 0); sad.sin_family = AF_INET; sad.sin_port = htons(31331); sad.sin_addr.s_addr = inet_addr("127.0.0.1"); connect(s, (const struct sockaddr *)&sad, sizeof(sad)); // fcntl(s, F_SETFL, O_ASYNC); // fcntl(s, F_SETOWN, getpid()); fcntl(s, 10, SIGIO); // fcntl(0, F_SETFL, O_ASYNC); fcntl(0, F_SETOWN, getpid()); // fcntl(0, 10, SIGIO); while(1) sleep(1); return 0; }