From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Alexandr R. Ogurtzoff" Organization: Mercuri plus To: community@altlinux.ru Subject: Re: [Comm] Socet server bind debug Date: Tue, 26 Aug 2003 11:56:56 +0300 User-Agent: KMail/1.5.2 References: <200308261052.13011.iscander@mercuri.mk.ua> <200308261123.05215.iscander@mercuri.mk.ua> <200308261519.52960.den@academ.org> In-Reply-To: <200308261519.52960.den@academ.org> MIME-Version: 1.0 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 8bit Content-Disposition: inline Message-Id: <200308261156.56129.iscander@mercuri.mk.ua> X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.1.2 Precedence: list Reply-To: community@altlinux.ru List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Aug 2003 08:50:59 -0000 Archived-At: List-Archive: List-Post: > программка-то завершилась, а соединение еще не закрылось, см netstat Гхм! Действительно по netstat открыто, но как? #include #include #include #include #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 Ну понятно что при этом он висит открытым -- С наилучшими пожеланиями Александр Огурцов