X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_FRT_STOCK2,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org MIME-Version: 1.0 Date: Wed, 6 Apr 2011 18:19:35 +0200 Message-ID: Subject: listen socket / poll block From: Thomas Stalder To: cygwin AT cygwin DOT com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Hello, I made a small application that block poll function. the result is : before pthread_create after pthread_create before poll before shutdown socket after shutdown socket before close socket after close socket under linux the result is: before pthread_create after pthread_create before poll before shutdown socket after shutdown socket after poll ret=3D1 error accept failed: Invalid argument The code of my application are : #include #include #include #include #include #include #include #include #include #include int SocketFD; void * my_thread(void* arg) { =A0 =A0struct sockaddr_in stSockAddr; =A0 =A0int ret; =A0 =A0struct pollfd p; =A0 =A0SocketFD =3D socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); =A0 =A0if(-1 =3D=3D SocketFD) =A0 =A0{ =A0 =A0 =A0 =A0perror("can not create socket"); =A0 =A0 =A0 =A0exit(EXIT_FAILURE); =A0 =A0} =A0 =A0memset(&stSockAddr, 0, sizeof(stSockAddr)); =A0 =A0stSockAddr.sin_family =3D AF_INET; =A0 =A0stSockAddr.sin_port =3D htons(1100); =A0 =A0stSockAddr.sin_addr.s_addr =3D INADDR_ANY; =A0 =A0if(-1 =3D=3D bind(SocketFD, (struct sockaddr *)&stSockAddr, sizeof(s= tSockAddr))) =A0 =A0{ =A0 =A0 =A0 =A0perror("error bind failed"); =A0 =A0 =A0 =A0close(SocketFD); =A0 =A0 =A0 =A0exit(EXIT_FAILURE); =A0 =A0} =A0 =A0if(-1 =3D=3D listen(SocketFD, 10)) =A0 =A0{ =A0 =A0 =A0 =A0perror("error listen failed"); =A0 =A0 =A0 =A0close(SocketFD); =A0 =A0 =A0 =A0exit(EXIT_FAILURE); =A0 =A0} =A0 =A0for(;;) =A0 =A0{ =A0 =A0 =A0 =A0memset (&p, 0, sizeof (p)); =A0 =A0 =A0 =A0p.fd =3D SocketFD; =A0 =A0 =A0 =A0p.events =3D POLLIN; =A0 =A0 =A0 =A0p.revents =3D 0; =A0 =A0 =A0 =A0printf("before poll\n"); =A0 =A0 =A0 =A0ret =3D poll (&p, 1, -1); =A0 =A0 =A0 =A0printf("after poll ret=3D%d\n", ret); =A0 =A0 =A0 =A0int ConnectFD =3D accept(SocketFD, NULL, NULL); =A0 =A0 =A0 =A0if(0 > ConnectFD) =A0 =A0 =A0 =A0{ =A0 =A0 =A0 =A0 =A0 =A0perror("error accept failed"); =A0 =A0 =A0 =A0 =A0 =A0close(SocketFD); =A0 =A0 =A0 =A0 =A0 =A0exit(EXIT_FAILURE); =A0 =A0 =A0 =A0} =A0 =A0 =A0 =A0/* perform read write operations ... =A0 =A0 =A0 =A0read(sockfd,buff,size)*/ =A0 =A0 =A0 =A0shutdown(ConnectFD, SHUT_RDWR); =A0 =A0 =A0 =A0close(ConnectFD); =A0 =A0} =A0 =A0close(SocketFD); =A0 =A0return 0; } int main(void) { =A0 =A0pthread_t id; =A0 =A0printf("before pthread_create\n"); =A0 =A0pthread_create(&id, NULL, my_thread, NULL); =A0 =A0printf("after pthread_create\n"); =A0 =A0sleep(3); =A0 =A0printf("before shutdown socket\n"); =A0 =A0shutdown(SocketFD,2); =A0 =A0printf("after shutdown socket\n"); =A0 =A0sleep(3); =A0 =A0printf("before close socket\n"); =A0 =A0close(SocketFD); =A0 =A0printf("after close socket\n"); =A0 =A0sleep(30); } -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple