leandrojapa
(usa Debian)
Enviado em 11/04/2010 - 12:20h
Bom dia galera...to fazendo um trabalho de sockets em redes e preciso guarda os clientes conectados dentro de uma lista...mas ja estou com problemas pra manipular a propria lista...fiz uns testes na insercao de dados .mas sempre da erro de segmentacao...alguem ja passou por isso ou pode me ajudar onde estou pegando conteudo na memoria de forma errada.
muito grato.,
servidor.c
int main(int argc, char ** argv)
{
//~ int sockfd,n;
//~ pthread_t threadAccept;
//~ struct sockaddr_in * meu_end = getMeuSock(20000);
cria(listaClientes);
struct in_addr temp;
memset(&temp, 127, sizeof(struct in_addr));
adicionar(listaClientes, temp, 4);
// memset(&temp, 255, sizeof(struct in_addr));
//adicionar(listaClientes, temp, 4);
imprimeCliente(listaClientes);
return 0;
}
lista.h
struct listaSock
{
struct in_addr endereco;
int sockfd;
struct listaSock * proximo;
};
typedef struct listaSock ListaS;
int listSize = sizeof(ListaS);
ListaS *listaClientes;
void cria(ListaS* s)
{
s = meuMalloc(sizeof(struct listaSock));
s->proximo = NULL;
}
/*estrutura para adicionar a lista*/
void adicionar(ListaS *s, struct in_addr end, int sockd)
{
ListaS *novo;
novo = meuMalloc(listSize);
novo->endereco = end;
novo->sockfd = sockd;
novo->proximo = s->proximo;
s->proximo = novo;
}
void imprimeCliente (ListaS *ini)
{
ListaS *p;
for (p = ini->proximo; p != NULL; p = p->proximo)
printf ("%s\n", inet_ntoa(p->endereco));
//printf("teste");
}
void *meuMalloc(unsigned int nbytes)
{
void *ptr;
ptr = malloc(nbytes);
if (ptr == NULL)
{
printf ("\nErro no Malloc\n");
exit(EXIT_FAILURE);
}
return ptr;
}