Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm 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 Message-ID: <4099694C.DB07AC2E@hot.pl> Date: Thu, 06 May 2004 00:23:08 +0200 From: Jacek Trzmiel MIME-Version: 1.0 To: cygwin AT cygwin DOT com Subject: Re: pthreads and sockets - Cannot register window class error References: <4098760F DOT CDB4F630 AT hot DOT pl> <4098E04B DOT 34D2866B AT dessent DOT net> <20040505210340 DOT GB321 AT coe DOT bosbc DOT com> Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 7bit X-IsSubscribed: yes > >> void test() > >> { > >> /* go find out about the desired host machine */ > >> struct hostent *he = gethostbyname(HOST); > >> if (he == 0) { > >> perror("gethostbyname"); > >> exit(1); > >> } > > > >Just a wild guess, but gethostbyname() is probably not reentrant and > >can't be called from threads like that. Christopher Faylor wrote: > Unless HOST is a numeric IP address, gethostbyname should be properly > reentrant. The only time gethostbyname is not thread safe is when it is > resolving a numeric IP. --- GetHostByNameTest.cpp ------------------------------------------ #include #include #include #include #include #include #include using std::cout; using std::endl; const char *HOST = "example.org"; void test() { for(int i=0; i<100; ++i) { /* go find out about the desired host machine */ struct hostent *he = gethostbyname(HOST); if(he == 0) { perror("gethostbyname"); exit(1); } assert( he->h_addrtype == AF_INET ); assert( he->h_addr_list[0] ); } } void *task(void *arg) { test(); return NULL; } int main() { const int threads = 70; pthread_t threadTable[threads]; for(int i=0; i $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > > $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > > $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > > $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > > $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > > $ g++ GetHostByNameTest.cpp -lpthread -o GetHostByNameTest.exe && ./GetHostByNameTest.exe > gethostbyname: Operation not permitted > gethostbynamegethostbynamegethostbynamegethostbynamegethostbyname: : : : : Operation not permittedOperation > not permittedOperation not permittedOperation not permittedOperation not permitted Win2k SP4 + hotfixes. Can someone reproduce it? Best regards, Jacek. -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/