aaadam Temat założony przez niniejszego użytkownika |
[c] [linux] [socket] prawidłowe zakymanie socketa » 2017-12-06 10:04:12 witam, piszę aplikację, która używa socketa, mam problem jak poprawnie zamknąć socket, ponieważ gdy zamknę program i uruchomię go szybko od razu to dostanę taki błąd : ERROR on binding: Address already in use
to kod początku programu : int portno; socklen_t clilen; char buffer[ 256 ]; struct sockaddr_in serv_addr, cli_addr; int n, pid; sockfd = socket( AF_INET, SOCK_STREAM, 0 ); printf( "sockfd %d\n", sockfd ); if( sockfd < 0 ) { perror( "ERROR opening socket" ); exit( 1 ); }
bzero(( char * ) & serv_addr, sizeof( serv_addr ) ); portno = 5001; serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons( portno );
if( bind( sockfd,( struct sockaddr * ) & serv_addr, sizeof( serv_addr ) ) < 0 ) { perror( "ERROR on binding" ); exit( 1 ); }
int newsockfd; listen( sockfd, 5 ); clilen = sizeof( cli_addr ); while( 1 ) { newsockfd = accept( sockfd,( struct sockaddr * ) & cli_addr, & clilen ); }
a socket zamykam tak( próbowałem obu funkcji) : void sigint( int a ) { close( sockfd ); exit( 1 ); }
po dłuższej chwili nie ma problemu i aplikacja daje się normalnie uruchomić, czytałem na necie, że socket jest przez chwilę zajęty nawet po zamknięciu aplikacji, pozdro |
|
darko202 |
» 2017-12-06 12:52:51 |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-12-06 13:26:58 to są moje wszystkie headery : #include <stdio.h> #include <netdb.h> #include <netinet/in.h> #include <pthread.h> #include <signal.h> #include <errno.h> #include "RF24.h"
czyli chyba standardowa biblioteka linuxa |
|
darko202 |
» 2017-12-06 13:34:48 na http://cpp0x.pl/kursy/Kurs-WinSock-C++/Tlo-Klient-Serwer/276#include <sys/socket.h> .... int sockfd, new_fd; .... if( !fork() ) { close( sockfd ); if( send( new_fd, "Hello, world!\n", 14, 0 ) == - 1 ) perror( "send" ); close( new_fd ); exit( 0 ); } close( new_fd );
czyli tak jak napisałem w 4. jest różnica na serwerze i kliencie |
|
Kalarepka |
lol » 2017-12-18 13:30:32 Jak mam rozmawiać z ludźmi którzy zaprzeczają prostej logice, nie w bezpośredni sposób, jedynie przedstawiają swoje "ja" i brną w jakieś swoje fantazje o matematyce które tyle wnoszą do tematu co nic? Wpadają w błędne koła swoich teorii, i wałkują to samo do znudzenia. Po prostu irytuje mnie coś takiego, i miałby tak każdy inteligentny człowiek, to naturalne. To że piszę prawdę o czyimś zachowaniu, nie jest obrażaniem, obrażanie to mówienie nieprawdy o kimś. Jeśli nie jesteście w stanie logicznie podbić moich argumentów, tylko doświadczam tutaj bezsensownego lania wody, to jak się nie poirytować, nawet nie odnosicie się do moich argumentów z sensem, z jakim je przedstawiłem, za wszelką cenę próbujecie zaprzeczyć, ale nie wiecie jak, wpadacie w błąd logiczny typu, a jest częścią b, a jest założeniem bez którego nie ma b, wtedy z b nie może wynikać a, u was może :D. Jeden nawet zaprzecza swoim słowom, pisze tak jak mu akurat pasuje i jaki jest trend w tej dyskusji, a trend jest taki że za wszelką cenę chcecie pokazać że się mylę. |
|
mateczek |
» 2017-12-18 19:45:10 komuś się fora pomyliły ?? |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2017-12-19 09:47:35 nie wiem dlaczego 'close' socket zaczęło działać, zamykam |
|
« 1 » |