logi sisse meist KKK

Loodud on tavaline sokkel üle TCP/IP ühenduse porti, mis pritsib umbes iga sekundi tagant infot, programm kontrollib, kas info ikka saabub, ning kui ühendus on mõnda aega tumm olnud, sulgeb sokli ja püüab uuesti ühenduda. Siin aga on probleem, sokkel jääb disconnect-käsu juures mõnikord kauaks toppama:

System.Net.Sockets.Socket sokkel;

private void timer1_Tick(object sender, EventArgs e)
{
    bool tooOld = DateTime.Now.CompareTo(lastOnlineTime.AddSeconds(60)) > 0;
    if(tooOld){
        sokkel.Shutdown(SocketShutdown.Both); //1. 
        sokkel.Disconnect(true);              //2. siin jääb mõnikord kauaks toppama
        sokkel.ConnectAsync();                //3. ühendame uuesti
    }
}

punktid 1 ja 2 on ehtsad Socket-klassi väljakutsed, 3. punkt on näitlikustatud, sest sellele tuleb veel parameetreid juurde lisada ja on tegelikult koodis realiseeritud eraldi sokliklassi kaudu.

Kuidas sundida soklit kiiremini sulgeda? Võibolla on mõni parameeter vale?

This küsimus is marked "community wiki".

küsitud Jun 09 '11 at 11:32

Teet65's gravatar image

Teet65
175912

Paistab, et on liiga krõbe, või on selle portaali progejad tüdinenud uusi teemasid ootamast.

(Jun 10 '11 at 14:57) Teet65

Suvi, kõik rannas või grillivad ;)

(Jun 12 '11 at 11:45) Ahto Truu ♦♦

Uue ühenduse tegemise eelduseks ei ole ju vana sulgemine. Alustad uuega ja vana paned taustal kinni.

link

vastatud Jul 02 '11 at 15:09

Andrei%20Errapart's gravatar image

Andrei Errapart
462

Asünkroonne sokli sulgemine oligi see, mida tegelikult vajasin. Suur tänu, miskipärast jäi see võimalus kahe silma vahele.

(Jul 06 '11 at 14:50) Teet65

Võib olla ei puutu asjasse aga kuidas sul timer1_Tick välja kutsutakse

... += new EventHandler(timer1_Tick)

ja kus sul timer1 luuakse? Mõnikord võib juhtuda et new EventHandleri tõttu tõmmatakse mitu ticki korraga käima.

link

vastatud Jun 21 '11 at 16:14

gaal's gravatar image

gaal
1

Tegelikult tehakse programmis igasuguseid eelkontrolle, soklit püütakse sulgeda vaid siis, kui "connected" on tõene. Silumismoes seisab täitmisjärg "Disconnect()"-real, liikumata edasi, ja uusi taimeri sündmusi ei näi tekkivat. Kuigi proovin selle versiooni esimesel võimalusel ära, loon mingi globaalse muutuja "close_pending" ja kui see omadus on aktiivne, ei luba uutel sulgemiskatsetel peale tulla.

(Jun 21 '11 at 23:36) Teet65

Järele proovitud, mitu taimeri sündmust disconnectile peale ei tule.

(Jul 06 '11 at 13:55) Teet65
Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×2
×2
×1

küsitud: Jun 09 '11 at 11:32

nähtud: 2,150 korda

viimati uuendatud: Jul 06 '11 at 14:50

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee