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

---------

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

From: Barcin Alpcigay (barcin.alpcigay@ceng.metu.edu.tr)
Date: Fri 16 Feb 2007 - 13:03:24 EET


Sn.Akyuz ve Sn.Isik,
verilen program parcacigina bakarak yorum yapmak yaniltici olur. Verilen kod
parcasindan accept() bekleyen ne socket'in type'ini cikarmak mumkun degil,
SEQPACKET kullanıyorsanız sonuç farklı, DGRAM kullanıyorsanız sonuç farklı
olur, o yüzden accept()'in size aynı socket number'ı vermesinin bir
açıklaması olabilmesi için tüm nitelikleri vermeniz lazım. SYS V IPC'den
hangi library'leri kullanıyorsunuz?

On Fri, 16 Feb 2007 10:56:04 +0200, Çağlar AKYÜZ wrote
> 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

Barcin.

_______________________________________________
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.