Помогите найти причину возникновения этой ошибки. понял то - что функция не может писать в client_addr но почему?
или это не так?
пример кода:
//Linux Fedora core 3
//Kernel 2.6.9-1.667smp
//gcc 3.4.2-6
int main()
int opt;
struct sockaddr_in server_addr;
static struct sockaddr_in client_addr;
int server_socket;
int socket_recv;
if( ! (server_socket = socket (AF_INET, SOCK_STREAM, 0)) )
{
close(server_socket);
return 0;
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons (5011);
if( bind(server_socket, (struct sockaddr *) &server_addr, sizeof (server_addr)) == -1)
{
close(server_socket);
return 0;
}
if(listen(server_socket, 5) == -1)
{
close(server_socket);
return 0;
}
errno = 0;
if((socket_recv = accept(server_socket, (struct sockaddr *) &client_addr,
(socklen_t *) sizeof (struct sockaddr_in) )) <= 0)
{
printf(" errno = %d\n", errno);
perror("accept");
switch(errno)
{
case EFAULT:
printf(" bad addr\n");
break;
default:
printf(" errno = %d\n", errno);
shutdown(server_socket, SHUT_RDWR);
close(server_socket);
return 0;
}
}
printf("accepted connection from %s, port %d\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port)) ;
shutdown(server_socket, SHUT_RDWR);
shutdown(socket_recv, SHUT_RDWR);
close(socket_recv);
close(server_socket);
}