Her bağlantıya thread açacaksan zaten kolaya kaçmış oluyorsun, thread e client soketini ver, iletişim thread içinde bağımsız olarak devam etsin, bağlantı sonlanınca thread de kapanır zaten, join etmene ya da o threadleri beklemene gerek yok. Yani ana thread sadece listen + accept yapıyor, her bağlantı geldiğinde client socket ile thread yaratılıyor ve yeni clientler beklenmeye devam ediyor. Event driven kullanman daha faydalı olur nonblock mode ile, select + nonblock dene istersen. Bylece 50 bağlantıda server'ın çkmez, bkz: c10k problem. ilk soru kolay, hata kontrolü olmadan tek satırda parse edersin, sscanf(strchr(argv , ':') + 1, "%d", &port); ama tabi ki yle birşey yapma :) Doğru ve tam kod rneği, #include <stdio. h> int main { char p; int port; if (argc!= 2) p = strchr(argv , ':'); if if (sscanf(p + 1, "%d", &port) != 1) printf ; return 0; }

protokol seviyesinde şu olabilir Content length headerini mutlaka ver ve doğru olsun, connection:close da ekle soket seviyesinde SO_DONTLINGER parametresini aktif et (bu 200 ms falan etkiler en çok) HolyOne tarafından 29/Tem/14 19:42 tarihinde düzenlenmiştir Nush ile uslanmayanı etmeli tekdir, Tekdir ile uslanmayanın hakkı ktektir!

Linux sistemlerde soket programlama hakkında pek bilgim yok ama cevabını bende merak ediyorum sorununun. GCC de yok derleyemedim şimdilik. Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

Bağlantıyı sonlandırmak TCP de mesele. O yüzden bak syle yap Hello World\r\n 0\r\n\r\n Ordaki 0 düz 0 en sona bunu ekle. Yüzde 90 çzer

Hocam tam detayını bilmiom napion ama protokol seviyesinde şu olabilir Content length headerini mutlaka ver ve doğru olsun, connection:close da ekle soket seviyesinde SO_DONTLINGER parametresini aktif et (bu 200 ms falan etkiler en çok) Holy doğru testip etmiş, content-length koymadığın için header'e browser datanın bittiğini anlamıyor, devamını beklerken bağlantıyı kapatıyorsun, hiç data gelmemiş gibi hata dndürüyor. datayı şyle düzenle dene, bende düzeldi sorun, ayrıca o sleep i close dan sonra koymanın bir anlamı yok, zaten accept blokeli çalışır, yeni bağlantı gelene kadar bekler. nce koymanın da bir anlamı yok gerçi, write ya da send ne kadar data yolladığını dndürür, datanın tümünün tek seferde yollanacağı garanti değildir, dngü içinde hepsi gidene kadar yollaman lazım. char data = ("HTTP/1.0 200 OK\r\n" "Content-Type: text/html; charset=utf-8\r\n" "Content-Length: 12\r\n\r\n" "Hello World!");

Gelen yanıtlara katılıyorum, doğru tespit. Ek olarak "Boost Asio" kütüphanesine bakmanı tavsiye ederim kendinden multithread ve socket açma falan fonksiyonları mevcut çok hoşuna gider ve hızlı. Linux te tecrübeyle sabit, farkedilir hız kazandırıyor. Computer Engineer/SyStem Analyst/ Coder ShyRain

teşekkür ederim arkadaşlar peki aramızda libuv kullanan derleyebilen varmı acaba? ben libuv kütüphanesini derleyip kullanamadım bir türlü başarabildiğim an libuv üzerinde geliştirme yapmayı düşünüyorum. 2. dünya savaşı sıralarında faşist diktatrler mussolini ve hitler tüm işyerlerinde resimlerinin asılmasını emretmişlerdi. bunu içine sinmeden yapan bir kitapçının aklına müthiş bir fikir gelmişti ve beklemeden bunu yaptı. kitap vitrinine koyduğu bu iki diktatrün resimlerinin arasına dünya edebiyat tarihinin nemli isimlerinden victor hugo"nun nemli bir eserini koymuştu: "SEFİLLER".

Her bağlantıya thread açacaksan zaten kolaya kaçmış oluyorsun, thread e client soketini ver, iletişim thread içinde bağımsız olarak devam etsin, bağlantı sonlanınca thread de kapanır zaten, join etmene ya da o threadleri beklemene gerek yok. Yani ana thread sadece listen + accept yapıyor, her bağlantı geldiğinde client socket ile thread yaratılıyor ve yeni clientler beklenmeye devam ediyor. Event driven kullanman daha faydalı olur nonblock mode ile, select + nonblock dene istersen. Bylece 50 bağlantıda server'ın çkmez, bkz: c10k problem. ilk soru kolay, hata kontrolü olmadan tek satırda parse edersin, sscanf(strchr(argv , ':') + 1, "%d", &port); ama tabi ki yle birşey yapma :) Doğru ve tam kod rneği, #include <stdio. h> int main { char p; int port; if (argc!= 2) p = strchr(argv , ':'); if if (sscanf(p + 1, "%d", &port) != 1) printf ; return 0; } Hocam şu forumda 2 kişinin bilgisine çok imreniyorum bir sen bir FireX'e. Bir konuda grmüştüm heral RCE konusuydu ondan sonra sizin postara gz attım hayranlık duymamak elde değil.

Sorun buradaki kodlarda değil, chrome ile açtığında zaten yavaş geliyormuş, o yüzden sorunu orada aramalısın. Ayrıca çok da hızlı olmasını bekleme, localhostta çalıştırdığın ne bilmiyorum. Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

merhaba arkadaşlar. bir proje için basit şekilde socket bağlantı rneği yaptım ancak sorunum şu google chrome tarayıcısı üzerinden localhost:8080 yazdığım zaman ilk etapta boş sayfa geliyor sayfayı yenileme yaptığım zaman biraz yükleme beklentisinden sonra ekrana merhaba dünya yazıyor bu sorunu nasıl aşabilirim direk localhost:8080 yazdığım zaman hello world gelmesini hızlı cevap vermesini nasıl sağlarım. rnek kodum. #include <stdio. h> #include <stdlib. h> #include <unistd. h> #include <errno. h> #include <string. h> #include <sys/socket. h> #include <netinet/in. h> #include <arpa/inet. h> #include <sys/types. h> #include <time. h> char data = ( "HTTP/1.0 200 OK \n" "Content-Type: text/html; charset=utf-8 \n\n" "Hello World!" ); void lws_sleep static void lws_listen { struct sockaddr_in serv_addr; int listenfd = 0; int connfd = 0; char sendBuff ; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, '0', sizeof ; memset(sendBuff, '0', sizeof ; serv_addr. sin_family = AF_INET; serv_addr. sin_addr. s_addr = htonl ; serv_addr. sin_port = htons ; bind(listenfd, &serv_addr, sizeof ; listen(listenfd, 1024); while (1) } int main 2. dünya savaşı sıralarında faşist diktatrler mussolini ve hitler tüm işyerlerinde resimlerinin asılmasını emretmişlerdi. bunu içine sinmeden yapan bir kitapçının aklına müthiş bir fikir gelmişti ve beklemeden bunu yaptı. kitap vitrinine koyduğu bu iki diktatrün resimlerinin arasına dünya edebiyat tarihinin nemli isimlerinden victor hugo"nun nemli bir eserini koymuştu: "SEFİLLER".

haklısınız arkadaşlar herkese tek tek teşekkür ederim sorun düzeldi hemen ekrana geliyor. 2 sorum daha olacak arkadaşlar. 1. ./program --port:8080 yazıyorum buradaki --port:8080 yazısını okuyabiliyorum argv üzerinden ancak gelen datayı parse edip : dan sonraki bilgi almak ve bunu int olarak cevirme işlemini nasıl yaparım. 2. thread'lar ile gelen istekler için thread oluşturup gelen isteğe cevap verdikten sonra sonlanmasını sağlamak istiyorum bunu nasıl yaparım rnek şema aşağıdaki gibi? + worker thread + + gelen istek + worker thread + mutex + cevap + worker thread + + Housekeeping 2. dünya savaşı sıralarında faşist diktatrler mussolini ve hitler tüm işyerlerinde resimlerinin asılmasını emretmişlerdi. bunu içine sinmeden yapan bir kitapçının aklına müthiş bir fikir gelmişti ve beklemeden bunu yaptı. kitap vitrinine koyduğu bu iki diktatrün resimlerinin arasına dünya edebiyat tarihinin nemli isimlerinden victor hugo"nun nemli bir eserini koymuştu: "SEFİLLER".