Re: [Linux-programlama] accept() fonksiyonu...

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Çağlar AKYÜZ (caglar@bilkon-kontrol.com.tr)
Date: Fri 16 Feb 2007 - 10:56:04 EET


Cem Vedat ISIK yazmış:
> Merhabalar, oncelikle bu e-postayi birden fazla alanlardan simdiden
> özür diliyorum, ancak ikisi ile de ilgili oldugunu dusundum. Gelelim
> soru(nu)ma,
>
> [...kestim...]
>
> listen( receiverSock, MAX_CONNECTIONS ); // MAX_CONNECTIONS is
> max. length of queue of pending connections
>
> while ( 1 ) // listens connections and accepts them to newSock
> {
> newSock = accept( receiverSock, (struct sockaddr *) &servAddr,
> &servLen );
> pthread_create( &sql_tid, NULL, ( void *)process_xxx, &newSock );
> }

Kanımca buradaki sorun pthread_create geçilen *arg değerinde.(yani
&newSock). Şöyle bir senaryo olsun:

1) Connection request geldi,accept ile kabul ettik(socket = 1).
pthread_create ile yeni thread(thread1) request yaptık. Ama kernel
request'i hemen işletmedi.
2) Hemen ardından(1 ms diyelim) , yeni bir connection request
geldi.Accept ile kabul ettik.(socket = 2). pthread_create ile yeni
thread(thread2) request yaptık. Kernel bunu gene
sıraya koydu.
3)Kernel ilk thread'i oluşturmaya karar verdi.Socket değişkenini
okudu.(oops! şu an 2 ama!).
4)Kernel ikinci thread'i oluşturmaya karar verd. Socket değişkenini
okudu. (ne güzel 2 şu an.)
5) Sonuç iki thread'e de 2 numaralı socket'i geçmiş oldunuz. Birinci
badem oldu :)

pthread_create yardım sayfasından :
/ "The calling function must ensure that arg remains valid for the
new thread throughout its lifetime"

/Yani her bir thread için geçtiğiniz arg değeri thread yok edilene kadar
memory de bulunmalı ki bu örnekteki durum bu değil diye düşünüyorum.

Saygılarımla
Çağlar AKYÜZ

Not : Yolladığınız kod içinde ingilizce yorumlar olduğu için daha
hızlı cevap verebilmek için ben de ingilizce kullandım. Uygunsuzluk için
şimdiden özür dilerim.

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.