* [Comm] Socet server bind debug
@ 2003-08-26 7:52 Alexandr R. Ogurtzoff
2003-08-26 7:57 ` Maxim.Savrilov
2003-08-26 8:09 ` Someone Unknown
0 siblings, 2 replies; 11+ messages in thread
From: Alexandr R. Ogurtzoff @ 2003-08-26 7:52 UTC (permalink / raw)
To: community
Приветвую, уважаемых.
Пытаюсь проверить своб программку сервер. Однопоточная. После приёма сообщения
от клиента закрывает сокет, который используется в accept. При выходе из
программы закрывается сокет с которым вызывался bind. Контролирую при помощи
печати диагностических сообщений. То есть программка это место проходит.
Закрываю через close(socetdescriptor).
Чтобы проверить присединяюсь через telnet на порт, который слушает программка
и отправляю сообщения. При посылке сообщения, которое прекращает работу
программы '0' в качестве первого символа, не могу повторно её запустить,
судя по всему до истечения таймаута TCP. Ругается bind
Error on binding, exit: Address already in use.
Это спацифика присоединения через telnet? Или я его как то некоректно
закрываю? Может ему сначала shutdown(socet) делать надо?
--
С наилучшими пожеланиями
Александр Огурцов
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 7:52 [Comm] Socet server bind debug Alexandr R. Ogurtzoff
@ 2003-08-26 7:57 ` Maxim.Savrilov
2003-08-26 8:09 ` Someone Unknown
1 sibling, 0 replies; 11+ messages in thread
From: Maxim.Savrilov @ 2003-08-26 7:57 UTC (permalink / raw)
To: community
[-- Attachment #1: Type: text/plain, Size: 1512 bytes --]
On Tue, 26 Aug 2003 10:52:12 +0300
"Alexandr R. Ogurtzoff" <iscander@mercuri.mk.ua> wrote:
> Приветвую, уважаемых.
> Пытаюсь проверить своб программку сервер. Однопоточная. После приёма сообщения
> от клиента закрывает сокет, который используется в accept. При выходе из
> программы закрывается сокет с которым вызывался bind. Контролирую при помощи
> печати диагностических сообщений. То есть программка это место проходит.
> Закрываю через close(socetdescriptor).
> Чтобы проверить присединяюсь через telnet на порт, который слушает программка
> и отправляю сообщения. При посылке сообщения, которое прекращает работу
> программы '0' в качестве первого символа, не могу повторно её запустить,
> судя по всему до истечения таймаута TCP. Ругается bind
> Error on binding, exit: Address already in use.
> Это спацифика присоединения через telnet? Или я его как то некоректно
> закрываю? Может ему сначала shutdown(socet) делать надо?
а на чем написано, я не соображу?
как то писал на perl многопоточный сервачок, так там было такое
как отвалится, так какое-то время нельзя запустить его снова, с той же ошибкой.
Потом переписал на С, это исчезло. Правда, он и падать перестал, переписанный. ;)
хотя заказчику это уже не надо было :(
--
>> 10 бредовых коментариев... Жуть. Откуда столько инергии у народа...
> а твой чем лучше ? насчет информативности - вообще ноль :)
как же так -- ноль! подсчитано число бредовых комментариев, а это большая аналитическая работа. (LOR)
[-- Attachment #2: Type: application/pgp-signature, Size: 307 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 7:52 [Comm] Socet server bind debug Alexandr R. Ogurtzoff
2003-08-26 7:57 ` Maxim.Savrilov
@ 2003-08-26 8:09 ` Someone Unknown
2003-08-26 8:23 ` Alexandr R. Ogurtzoff
1 sibling, 1 reply; 11+ messages in thread
From: Someone Unknown @ 2003-08-26 8:09 UTC (permalink / raw)
To: community
В сообщении от 26 Август 2003 11:52 Alexandr R. Ogurtzoff написал(a):
> Приветвую, уважаемых.
> Пытаюсь проверить своб программку сервер. Однопоточная. После приёма
> сообщения от клиента закрывает сокет, который используется в accept. При
> выходе из программы закрывается сокет с которым вызывался bind. Контролирую
> при помощи печати диагностических сообщений. То есть программка это место
> проходит. Закрываю через close(socetdescriptor).
> Чтобы проверить присединяюсь через telnet на порт, который слушает
> программка и отправляю сообщения. При посылке сообщения, которое прекращает
> работу программы '0' в качестве первого символа, не могу повторно её
> запустить, судя по всему до истечения таймаута TCP. Ругается bind
> Error on binding, exit: Address already in use.
> Это спацифика присоединения через telnet? Или я его как то некоректно
> закрываю? Может ему сначала shutdown(socet) делать надо?
См. man setsockopt и man 7 socket на предмет SO_REUSEADDR. А сделать shutdown
действительно не помешает, но по другим причинам.
--
Regards,
Someone
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 8:23 ` Alexandr R. Ogurtzoff
@ 2003-08-26 8:19 ` Denis S. Filimonov
2003-08-26 8:40 ` Someone Unknown
2003-08-26 8:56 ` Alexandr R. Ogurtzoff
0 siblings, 2 replies; 11+ messages in thread
From: Denis S. Filimonov @ 2003-08-26 8:19 UTC (permalink / raw)
To: community
On Tuesday 26 August 2003 15:23, Alexandr R. Ogurtzoff wrote:
> > См. man setsockopt и man 7 socket на предмет SO_REUSEADDR. А
> > сделать shutdown действительно не помешает, но по другим причинам.
>
> Спасибо за подсказку. Сейчас загляну. А насчёт shutdown? Я так
> смотрю везде обычно это делает инициатор соединения, а не
> слюшатель...Это во первых, а во вторых непоянто почему же bind помнит
> адрес+имя. если программку я уже завершил?
программка-то завершилась, а соединение еще не закрылось, см netstat
--
Sincerely,
Denis.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 8:09 ` Someone Unknown
@ 2003-08-26 8:23 ` Alexandr R. Ogurtzoff
2003-08-26 8:19 ` Denis S. Filimonov
0 siblings, 1 reply; 11+ messages in thread
From: Alexandr R. Ogurtzoff @ 2003-08-26 8:23 UTC (permalink / raw)
To: community
> См. man setsockopt и man 7 socket на предмет SO_REUSEADDR. А сделать
> shutdown действительно не помешает, но по другим причинам.
Спасибо за подсказку. Сейчас загляну. А насчёт shutdown? Я так смотрю везде
обычно это делает инициатор соединения, а не слюшатель...Это во первых, а во
вторых непоянто почему же bind помнит адрес+имя. если программку я уже
завершил?
--
С наилучшими пожеланиями
Александр Огурцов
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 8:19 ` Denis S. Filimonov
@ 2003-08-26 8:40 ` Someone Unknown
2003-08-26 8:56 ` Alexandr R. Ogurtzoff
1 sibling, 0 replies; 11+ messages in thread
From: Someone Unknown @ 2003-08-26 8:40 UTC (permalink / raw)
To: community
В сообщении от 26 Август 2003 12:19 Denis S. Filimonov написал(a):
> On Tuesday 26 August 2003 15:23, Alexandr R. Ogurtzoff wrote:
> > > См. man setsockopt и man 7 socket на предмет SO_REUSEADDR. А
> > > сделать shutdown действительно не помешает, но по другим причинам.
> >
> > Спасибо за подсказку. Сейчас загляну. А насчёт shutdown? Я так
> > смотрю везде обычно это делает инициатор соединения, а не
> > слюшатель...
По-хорошему, и тот и другой. Дабы быть уверенным, что прием-передача завершены
и ни один конец не будет больше передавать другому данные.
> > Это во первых, а во вторых непоянто почему же bind помнит
> > адрес+имя. если программку я уже завершил?
>
> программка-то завершилась, а соединение еще не закрылось, см netstat
Справедливо 8)
--
Regards,
Someone
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 8:19 ` Denis S. Filimonov
2003-08-26 8:40 ` Someone Unknown
@ 2003-08-26 8:56 ` Alexandr R. Ogurtzoff
2003-08-26 9:01 ` Denis S. Filimonov
1 sibling, 1 reply; 11+ messages in thread
From: Alexandr R. Ogurtzoff @ 2003-08-26 8:56 UTC (permalink / raw)
To: community
> программка-то завершилась, а соединение еще не закрылось, см netstat
Гхм! Действительно по netstat открыто, но как?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "tst.h"
int ConnectionProccessing(int sd)
{
char buffer[ BUFFER_SIZE ];
int count;
memset(buffer,0,sizeof(buffer));
count= recv(sd, buffer,sizeof(buffer), 0);
if (count < 0)
{perror("Recive error, stop proccessing"); return 1;};
if (count >= BUFFER_SIZE)
{perror("Buffer overflow error"); return 2;};
if (buffer[0]=='0')
{perror("Conection terminated by remote side..."); return -1;};
buffer[count+1]=0;
printf("Recive \n %s \n", buffer);
return 0;
}
int main (int argc, char *argv[] )
{
int sd, exit_flag, port=DEFAULT_PORT;
struct sockaddr_in addr;
printf ("\n %s test control started sucsesfully \n", argv[0]);
if((sd = socket(PF_INET,SOCK_STREAM,0))==-1)
panic("Error socket creation,exit");
memset(&addr,0, sizeof(addr));
addr.sin_family = PF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_ANY;
if( bind(sd, &addr, sizeof(addr) )!=0 )
panic("Error on binding, exit");
if ( listen(sd, MAX_LISTEN) !=0 )
panic("Error on listening,exit");
exit_flag=0;
while( exit_flag == 0 )
{
int client, len=sizeof(addr);
client = accept(sd, &addr,&len);
printf ("\nHost ( %s : %d
)",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
exit_flag=ConnectionProccessing(client);
close(client); /*Здесь закрыл*/
printf ("\nClient closed\n");
}
close(sd); /* И здесь тоже закрыл, факт?*/
printf ("\n%s finished\n", argv[0]);
return 0;
}
От вет на посылку '0' в качстве первого символа, то есть завершаем программку
[iscander@iscander gatedeamon]$ ./gatectrl
./test test control started sucsesfully
Conection terminated by remote side...: Success
Host ( 127.0.0.1 : 34431 )Client closed /*Здесь закрыл*/
./test test finished /* И здесь тоже закрыл, факт?*/
[iscander@iscander gatedeamon]$ ./test
./test test control started sucsesfully
Error on binding, exit: Address already in use
Ну понятно что при этом он висит открытым
--
С наилучшими пожеланиями
Александр Огурцов
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 8:56 ` Alexandr R. Ogurtzoff
@ 2003-08-26 9:01 ` Denis S. Filimonov
2003-08-26 9:20 ` Alexandr R. Ogurtzoff
0 siblings, 1 reply; 11+ messages in thread
From: Denis S. Filimonov @ 2003-08-26 9:01 UTC (permalink / raw)
To: community
On Tuesday 26 August 2003 15:56, Alexandr R. Ogurtzoff wrote:
> > программка-то завершилась, а соединение еще не закрылось, см
> > netstat
>
> Гхм! Действительно по netstat открыто, но как?
Оно, вероятно не открыто (CONNECTED), а что-нибудь типа FIN_WAIT, т.е.
ожидает пока клиент завершит соединение, почитайте где-нибудь как tcp
открывает/закрывает соединения.
А способ решения вам же подсказал некто неизвестный ;) -- SO_REUSEADDR
--
Sincerely,
Denis.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 9:01 ` Denis S. Filimonov
@ 2003-08-26 9:20 ` Alexandr R. Ogurtzoff
2003-08-26 9:25 ` Denis S. Filimonov
0 siblings, 1 reply; 11+ messages in thread
From: Alexandr R. Ogurtzoff @ 2003-08-26 9:20 UTC (permalink / raw)
To: community
Спасибо, Денис и некто неизвестный :-)
> Оно, вероятно не открыто (CONNECTED), а что-нибудь типа FIN_WAIT, т.е.
> ожидает пока клиент завершит соединение, почитайте где-нибудь как tcp
> открывает/закрывает соединения.
Это я помню ещё по разборкам с IPTables. ;-)
> А способ решения вам же подсказал некто неизвестный ;) -- SO_REUSEADDR
Насколько это "кашерно" ;-). И спасусь ли я от єтого если принудительно буду
делать shutdown. Наверное всё же не правильно, когда после работы программы
её запчасти всё ещё остаються в системе.
--
С наилучшими пожеланиями
Александр Огурцов
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 9:20 ` Alexandr R. Ogurtzoff
@ 2003-08-26 9:25 ` Denis S. Filimonov
2003-08-26 9:37 ` Alexandr R. Ogurtzoff
0 siblings, 1 reply; 11+ messages in thread
From: Denis S. Filimonov @ 2003-08-26 9:25 UTC (permalink / raw)
To: community
On Tuesday 26 August 2003 16:20, Alexandr R. Ogurtzoff wrote:
> Спасибо, Денис и некто неизвестный :-)
>
> > Оно, вероятно не открыто (CONNECTED), а что-нибудь типа FIN_WAIT,
> > т.е. ожидает пока клиент завершит соединение, почитайте где-нибудь
> > как tcp открывает/закрывает соединения.
>
> Это я помню ещё по разборкам с IPTables. ;-)
>
> > А способ решения вам же подсказал некто неизвестный ;) --
> > SO_REUSEADDR
>
> Насколько это "кашерно" ;-). И спасусь ли я от єтого если
вполне :)
> принудительно буду делать shutdown. Наверное всё же не правильно,
Если на обоих концах, то думаю да.
> когда после работы программы её запчасти всё ещё остаються в системе.
это неизбежно, т.к. программа может выплюнуть данные в сокет и закрыть
его намного раньше, чем они реально будут переданы.
--
Sincerely,
Denis.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Comm] Socet server bind debug
2003-08-26 9:25 ` Denis S. Filimonov
@ 2003-08-26 9:37 ` Alexandr R. Ogurtzoff
0 siblings, 0 replies; 11+ messages in thread
From: Alexandr R. Ogurtzoff @ 2003-08-26 9:37 UTC (permalink / raw)
To: community
> это неизбежно, т.к. программа может выплюнуть данные в сокет и закрыть
> его намного раньше, чем они реально будут переданы.
Понял, нормально. Как я понимаю даже если я обработку соединения буду делать
в fork-нутом процессе это тоже не будет смертельно для системы? Просто через
некоторое время она сама всё закроет.... Спасибо. Меня собственно мусор
беспокоил, но раз система сама его прибирает...Что сказать Linux rules
forever :-D
--
С наилучшими пожеланиями
Александр Огурцов
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2003-08-26 9:37 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-26 7:52 [Comm] Socet server bind debug Alexandr R. Ogurtzoff
2003-08-26 7:57 ` Maxim.Savrilov
2003-08-26 8:09 ` Someone Unknown
2003-08-26 8:23 ` Alexandr R. Ogurtzoff
2003-08-26 8:19 ` Denis S. Filimonov
2003-08-26 8:40 ` Someone Unknown
2003-08-26 8:56 ` Alexandr R. Ogurtzoff
2003-08-26 9:01 ` Denis S. Filimonov
2003-08-26 9:20 ` Alexandr R. Ogurtzoff
2003-08-26 9:25 ` Denis S. Filimonov
2003-08-26 9:37 ` Alexandr R. Ogurtzoff
ALT Linux Community general discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/community/0 community/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 community community/ http://lore.altlinux.org/community \
mandrake-russian@linuxteam.iplabs.ru community@lists.altlinux.org community@lists.altlinux.ru community@lists.altlinux.com
public-inbox-index community
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.community
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git