Article View: alt.pl.comp.lang.csharp
Article #21979Re: TcpListener, jak zatrzymać
From: yamma
Date: Mon, 10 Jan 2011 13:18
Date: Mon, 10 Jan 2011 13:18
26 lines
2555 bytes
2555 bytes
yamma wrote: > Męczę się już z tym parę dni i nawet guglanie nie pomaga. Mam > TcpListenera, który nasłuchuje na jakimś tam porcie. On sobie chodzi > w osobnym wątku. Wszystko pięknie bangla, odpowiada na połączenia, > tworzy nowe sockety, itd. Problem pojawia się gdy chcę zakończyć > pracę tego TcpListenera. Jak to zrobić? Z poziomu jego wątku nie mogę > tego zrobić bo blokuje tenże wątek na metodzie AcceptTcpClient, > natomiast jeśli próbuję wywołać metodę Stop z innego wątku to > aplikacja się wywala z błędem "Operacja blokująca została przerwana > przez wywołanie funkcji WSACancelBlockingCall". Ok. Po dłuższym śledztwie wykoncypowałem dwa rozwiązania. Przede wszystkim, przyczyną takiego zachowania jest próba zamknięcia z innego wątku niż ten, w którym chodzi TcpListener. Jak łatwo się domyślić, tradycyjnie, przykłady z dokumentacji MSDN dotyczące TcpListenera można o kant dupy potłuc. W sieci jest mnóstwo pytań o to. Ludzie spod znaku MVP, którzy wypowiadają się chętnie w innych tematach, w tym akurat raczej milczą i jeśli ktoś się chce czegoś dowiedzieć w tym temacie to raczej się nie dowie. Pierwsze rozwiązanie, to wywołanie metody Stop() i ordynarne przechwycenie wyjątku. Choć to rozwiązanie dla mnie jest ryzykowne, bo gość, który je podał nie miał żadnego TTSa przy nazwisku. Drugie rozwiązanie, to zwykłe otwarcie nowego połączenia z TcpListenerem z poziomu wątku głownego co spowoduje wyjście z metody AcceptTcpClient() a o to nam chodzi. yamma PS. TTS - Tajemniczy Trzyliterowy Skrót
Technical Details
Message-ID:
<igf0vp$m70$1@inews.gazeta.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mailReferences:
<ig9rlh$26s$1@inews.gazeta.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail From: "yamma" <yamma@wp.pl> Newsgroups: alt.pl.comp.lang.csharp Subject: Re: TcpListener, jak zatrzymać Date: Mon, 10 Jan 2011 14:18:48 +0100 Organization: "Portal Gazeta.pl -> http://www.gazeta.pl" Lines: 27 Message-ID: <igf0vp$m70$1@inews.gazeta.pl> References: <ig9rlh$26s$1@inews.gazeta.pl> NNTP-Posting-Host: 89-72-155-103.dynamic.chello.pl Mime-Version: 1.0 X-Trace: inews.gazeta.pl 1294665529 22752 89.72.155.103 (10 Jan 2011 13:18:49 GMT) X-Complaints-To: usenet@agora.pl NNTP-Posting-Date: Mon, 10 Jan 2011 13:18:49 +0000 (UTC) In-Reply-To: <ig9rlh$26s$1@inews.gazeta.pl> X-MimeOLE: Produced By Microsoft MimeOLE V6.0.6002.18263 X-Priority: 3 X-Newsreader: Microsoft Windows Mail 6.0.6002.18197 X-User: yamma X-MSMail-Priority: Normal Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit