Autor
|
Tema: [AYUDA] Error en sockets (Leído 4,107 veces)
|
goro_333
Desconectado
Mensajes: 3
|
Hola a toda la gente del foro, estoy realizando un trabajo práctico de la materia Sistemas Operativos de la carrera Ingeniería en Sistemas de información en la UTN (Buenos Aires) y tengo un inconveniente con sockets. Estoy programando en Eclipse bajo el sistema operativo Ubuntu. Les cuento mi problema: en un header Sockets.h tengo la definición de la estructura t_socket_client y t_socket #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h>
typedef struct { int desc; struct sockaddr_in* my_addr; e_socket_mode mode; } t_socket;
typedef struct { t_socket* socket; t_socket* serv_socket; e_socket_state state; } t_socket_client;
y en el source file Sockets.c tengo la definición de una función sockets_createClient #include "headers/Sockets.h"
t_socket_client *sockets_createClient(char *ip, int port) { struct t_socket_client client = malloc(sizeof(struct t_socket_client));
client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr->s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0);
bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in));
return client; }
y el Eclipse me pone errores en cada linea de esta función diciendo "Multiple markers at this line - aplicación inválida de ‘sizeof’ a un tipo de dato incompleto ‘struct t_socket_client’ - la variable ‘client’ tiene inicializador pero de tipo de dato incompleto - aviso: variable ‘client’ sin usar [-Wunused-variable]"
Si alguien podría contestar, sería de mucha ayuda. Gracias por el espacio!
|
|
« Última modificación: 19 Mayo 2012, 20:14 pm por goro_333 »
|
En línea
|
|
|
|
RyogiShiki
Desconectado
Mensajes: 745
げんしけん - Hikkikomori FTW!!!
|
No se mucho (nada) de Sockets BSD en C pero pregunto: #include "headers/Sockets.h" t_socket_client *sockets_createClient(char *ip, int port) struct t_socket_client client = malloc(sizeof(struct t_socket_client )); client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr->s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0); bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in)); return client; }
Que cierras en la última linea si no has abierto nada, no sería así: #include "headers/Sockets.h" t_socket_client *sockets_createClient(char *ip, int port) { struct t_socket_client client = malloc(sizeof(struct t_socket_client )); client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr->s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0); bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in)); return client; }
Saludos
|
|
|
En línea
|
|
|
|
goro_333
Desconectado
Mensajes: 3
|
No se mucho (nada) de Sockets BSD en C pero pregunto: #include "headers/Sockets.h" t_socket_client *sockets_createClient(char *ip, int port) struct t_socket_client client = malloc(sizeof(struct t_socket_client )); client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr->s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0); bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in)); return client; }
Que cierras en la última linea si no has abierto nada, no sería así: #include "headers/Sockets.h" t_socket_client *sockets_createClient(char *ip, int port) { struct t_socket_client client = malloc(sizeof(struct t_socket_client )); client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr->s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0); bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in)); return client; }
Saludos Perdón, cuando lo pegue acá borre un { sin querer, pero el error sucede con el { puesto. Gracias por avisarme!
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
mmm struct t_socket_client client = malloc(sizeof(struct t_socket_client ));
que tal si... t_socket_client * client = (t_socket_client *)malloc(sizeof(t_socket_client ));
por otro lado estas ocupando puros punteros asi que vas a tener que de igual manera reservar memoria para estos dos miembros de la estructura t_socket_client... t_socket* socket; t_socket* serv_socket;
en lo particular yo me facilitaria la vida asi; t_socket_client client; client. socket = (t_socket *)malloc(sizeof(t_socket ));client. serv_socket = (t_socket *)malloc(sizeof(t_socket ));/** mas codigo X **/ return client; // retorno una copia.
o en tu forma: t_socket_client * client = (t_socket_client *)malloc(sizeof(t_socket_client ));client ->socket = (t_socket *)malloc(sizeof(t_socket ));client ->serv_socket = (t_socket *)malloc(sizeof(t_socket ));/** mas codigo X **/ return client; // retorno una copia.
Dulces Lunas.
|
|
« Última modificación: 19 Mayo 2012, 20:37 pm por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
exel
Desconectado
Mensajes: 50
|
Ademas de lo que ya dijeron arriba, creo que tambien falta reservar memoria para apuntar con my_addr y sin_addr.
Saludos
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. sockaddr_in si lo manejas como puntero vas a tener que reservar memoria... yo optaría mejor por instanciar... sin_addr se le asigna lo que se retorna al llamar a gethostbyname()... aun que la funcion retorna un puntero a una estructura hostent se puede obtener... lpHosten = gethostbyname("www.google.com.mx"); if (lpHosten == NULL) return false; udtSockAddrIn.sin_addr.s_addr = *((unsigned long*)lpHosten->h_addr_list[0]);
Usa punteros solo cuando lo requieras de lo contrario solo harás mas procesos de los necesarios... en varios casos de esas estructuras así como están y sin saber mas de otro código usaría las instancias de cada tipo. Dulces Lunas!¡.
|
|
« Última modificación: 19 Mayo 2012, 21:31 pm por BlackZeroX (Astaroth) »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
goro_333
Desconectado
Mensajes: 3
|
Bueno gracias a todos por colaborar con mi pedido de ayuda! Pude arreglar el problema usando sus soluciones y agregando un par de cosas mas sockets_createClient me quedo asi: t_socket_client *sockets_createClient(char *ip, int port) { t_socket_client *client = (t_socket_client*)malloc( (2*sizeof(t_socket)) + sizeof(e_socket_state)); client->socket = (t_socket*)malloc(sizeof(t_socket)); client->serv_socket = (t_socket*)malloc(sizeof(t_socket)); client->socket->my_addr = malloc(sizeof(struct sockaddr_in));
client->socket->my_addr->sin_family = AF_INET; client->socket->my_addr->sin_addr.s_addr = inet_addr(ip); client->socket->my_addr->sin_port = htons(port); client->state = SOCKETSTATE_DISCONNECTED; client->socket->desc = socket(AF_INET, SOCK_STREAM, 0);
bind(client->socket->desc, (struct sockaddr *)(client->socket->my_addr), sizeof(struct sockaddr_in));
return client; }
Si ven alguna locación demás o algo absurdo en mi código escucho sus críticas. Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con sockets
PHP
|
[KMT]
|
2
|
1,942
|
30 Abril 2007, 02:10 am
por дٳŦ٭
|
|
|
Ayuda con sockets
.NET (C#, VB.NET, ASP)
|
nik00
|
3
|
3,082
|
11 Marzo 2009, 12:08 pm
por Krackwar ™
|
|
|
Error tonto con threads y sockets
« 1 2 3 »
Java
|
Debci
|
22
|
12,219
|
28 Diciembre 2009, 10:20 am
por Debci
|
|
|
error al compilar sockets en c
Programación C/C++
|
Drewermerc
|
1
|
2,650
|
27 Abril 2014, 22:54 pm
por Drewermerc
|
|
|
Sockets en c++ y Ws2_32.lib y error
Programación C/C++
|
patilanz
|
7
|
4,594
|
4 Mayo 2014, 19:37 pm
por patilanz
|
|