* [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: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: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: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