Помогите найти причину возникновения этой ошибки.понял то - что функция не может писать в client_addr но почему?
или это не так?пример кода:
//Linux Fedora core 3
//Kernel 2.6.9-1.667smp
//gcc 3.4.2-6int 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);}
> errno = 0;socklen_t len = sizeof client_addr;
> if((socket_recv = accept(server_socket, (struct sockaddr *) &client_addr,&len )) <= 0)
А ты пишешь (socklen_t *) sizeof (struct sockaddr_in), т.е. числовую константу преобразовываешь в указатель, т.е. в адрес. Потом accept пытается писать по этому адресу и, ессно, обламывается.