🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #21979

Re: TcpListener, jak zatrzymać

#21979
From: yamma
Date: Mon, 10 Jan 2011 13:18
26 lines
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-mail
References: <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