🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.programming
6 messages
6 total messages Started by kom... Piotr Piatkowski Sun, 21 Apr 1996 00:00
Address already in use
#552
Author: kom... Piotr Piatkowski
Date: Sun, 21 Apr 1996 00:00
18 lines
1251 bytes
Ostatnio dosc czesto pisze proste serwery TCP, ktore sluchaja na 
okreslonym porcie na polaczenia. Jak to przy pisaniu programow - 
czesto wprowadza sie poprawki, rekompiluje (albo i nie, bo to czesto 
jest perl), niestety - zawsze po przerwaniu sluchajacego na danym 
porcie programu, przez kilka minut nie mozna go uruchomic ponownie bo
proba wykonania `bind' zglasza blad `address already in use'.

Nie pomaga wczesniejsze zamykanie aktywnych polaczen, jedynym 
rozwiazaniem jest zmiana portu na inny, co jednak z kolei wymaga 
modyfikacji programu klienta i nie zawsze jest proste.

Czy ktos zna sposob jak sobie z tym poradzic? Moze jest jakas komenda
ktora `czysci' dany port (moze byc root'owa), albo jeszcze lepiej - 
sprawdza czy faktycznie ktos na tym porcie slucha i jezeli nie to 
zwalania dany adres?

--
Piotr Piatkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: Address already in use
#553
Author: and... Andy
Date: Mon, 22 Apr 1996 00:00
27 lines
1624 bytes
kom...@uci.agh.edu.pl (Piotr Piatkowski) wrote:

noge tylko dodac ze jest to powodowane przez TCP/IP timeout, ktore
czeka aby miec pewnoc ze nie zostane pomieszna kolejnosc pakietow.
Wiec po odlaczeniu sie od port nie mozna go uzywac przez pewien czas.

pozdrowienia
Andrzej Trzeciak

>Ostatnio dosc czesto pisze proste serwery TCP, ktore sluchaja na 
>okreslonym porcie na polaczenia. Jak to przy pisaniu programow - 
>czesto wprowadza sie poprawki, rekompiluje (albo i nie, bo to czesto 
>jest perl), niestety - zawsze po przerwaniu sluchajacego na danym 
>porcie programu, przez kilka minut nie mozna go uruchomic ponownie bo
>proba wykonania `bind' zglasza blad `address already in use'.

>Nie pomaga wczesniejsze zamykanie aktywnych polaczen, jedynym 
>rozwiazaniem jest zmiana portu na inny, co jednak z kolei wymaga 
>modyfikacji programu klienta i nie zawsze jest proste.

>Czy ktos zna sposob jak sobie z tym poradzic? Moze jest jakas komenda
>ktora `czysci' dany port (moze byc root'owa), albo jeszcze lepiej - 
>sprawdza czy faktycznie ktos na tym porcie slucha i jezeli nie to 
>zwalania dany adres?

>--
>Piotr Piatkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: Address already in use
#554
Author: Jaroslaw Kowalski
Date: Mon, 22 Apr 1996 00:00
9 lines
800 bytes
Mialem identyczny problem, tez chodzilo o serwery TCP pisane w C++.
Ale zeby bylo smieszniej po uruchomieniu programu serwera na jednym komputerze
czasami problem wystepowal a czasami nie, na innym znowu 'address in use' 
wystepowal zawsze a na jeszcze innych nie bylo problemow.

Podejrzewam ze chodzi tutaj o Linuxa (MIMUW). Chyba FreeBSD nie ma takich
problemow.

				Jaroslaw Kowalski
Re: Address already in use
#555
Author: kom... Piotr Piatkowski
Date: Mon, 22 Apr 1996 00:00
23 lines
1473 bytes
Jaroslaw Kowalski (jkowalsk@PROBLEM_WITH_INEWS_DOMAIN_FILE) wrote:
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: Mialem identyczny problem, tez chodzilo o serwery TCP pisane w C++.
: Ale zeby bylo smieszniej po uruchomieniu programu serwera na jednym komputerze
: czasami problem wystepowal a czasami nie, na innym znowu 'address in use' 
: wystepowal zawsze a na jeszcze innych nie bylo problemow.

: Podejrzewam ze chodzi tutaj o Linuxa (MIMUW). Chyba FreeBSD nie ma takich
: problemow.

Nie tylko... Na linuxie moj kolega zauwazyl, ze kilkakrotne 
puszczenie netstata usuwa problem. Ale nie jestem pewien czy to nie 
bylo zludzenie. Natomiast identyczny problem wystepuje na Solarisie, 
a puszczanie netstata na maszynie bedacej serwerem WWW, FTP i IRC nie
jest zbyt pasjonujacym zajeciem :-)  Co do FreeBSD - nie sprawdzalem,
nie wiem. Ale wydaje mi sie ze problem jest typowy dla wszystkich 
Unixow.

: 				Jaroslaw Kowalski


--
Piotr Piatkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Re: Address already in use
#556
Author: ar... Artur Urbanowicz
Date: Tue, 23 Apr 1996 00:00
23 lines
878 bytes
/* 
   Piotrze - uzyj funkcji setsockopt() w podany nizej sposob.

   Pozdrawiam: Artur Urbanowicz
*/

int one = 1;

if( (tep = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1 )
{
  printf( "Could not get a free socket: %s", strerror(errno) );
  return -1;
}

if( setsockopt( tep,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(one) ) )
{
  printf( "Could not set socket option SO_REUSEADDR: %s", strerror(errno) );
  return -1;
}

.
.
.
Address already in use - ROZWIAZANIE
#557
Author: kom... Piotr Piatkowski
Date: Tue, 23 Apr 1996 00:00
36 lines
1536 bytes
Artur Urbanowicz (ar...@apollo.umcs.lublin.pl) wrote:
: /* 
:    Piotrze - uzyj funkcji setsockopt() w podany nizej sposob.

:    Pozdrawiam: Artur Urbanowicz
: */

: int one = 1;

: if( (tep = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)) == -1 )
: {
:   printf( "Could not get a free socket: %s", strerror(errno) );
:   return -1;
: }

: if( setsockopt( tep,SOL_SOCKET,SO_REUSEADDR,(char *)&one,sizeof(one) ) )
: {
:   printf( "Could not set socket option SO_REUSEADDR: %s", strerror(errno) );
:   return -1;
: }

Dziala doskonale - wielkie dzieki! :-)

Przy okazji - to co teraz pisalem jest akurat w perlu, wiec gdyby 
ktos chcial zobaczyc jak to wyglada w tym jezyku, sluze uprzejmie:

socket(S, &PF_INET, &SOCK_STREAM, $proto) 
  || die "Can't create the socket: $!\n";
setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, 1) 
  || die "Can't set socket to reuse address: $!\n";

(a potem standardowo - bind, listen, accept).


--
Piotr Piatkowski, Uczelniane Centrum Informatyki, AGH Krakow, POLAND
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads