| Код | #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <string.h> #include <unistd.h> #include <stdlib.h>
#define PORT_NU 7000
int main( int argc, const char * argv[] ) { int server; int optval;
if( ( server = socket( PF_INET, SOCK_STREAM, 0 ) ) == -1 ) printf( "oops!! cant create serv socket ((((" );
// SO_REUSEADDR - enable reuse local adress if it already open if( setsockopt( server, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof( optval ) ) == -1 ) printf( "something happen with set sock opt ((((" );
struct sockaddr_in address; address.sin_family = AF_INET; address.sin_addr.s_addr = INADDR_ANY; address.sin_port = htons( PORT_NU ); if( bind( server, (const struct sockaddr*)&address, sizeof( struct sockaddr_in ) ) == -1 ) { printf( "bind error (((((" ); //close( server ); } if( listen( server, 20 ) == -1 ) { printf( "error listening socket" ); //close( server ); } int client;
printf( "%d\n", server ); client = accept(server, 0, 0); if( client < 0 ) perror("Accept connection");
int bufsize=1024; char *buffer=malloc(bufsize); while( read( client, buffer, bufsize ) ) { if( !strncmp( buffer, "exit", strlen( "exit" ) ) ) break; printf( "%s", buffer ); }
close( client ); close( server ); return 0; }
|
использую setsockopt( server, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof( optval ) ) но при выключении и запуске bind выдает ошибку. также пробовал писать SO_REUSEPORT и вместе пробовал использовать - итог один и тот же: bind дает ошибку при повторном запуске.
Подскажите в чем ошибка? |