UTNianos

Versión completa: [Sistemas Operativos] Sockets y Sendfile
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Che, estamos teniendo el siguiente problema con el codigo:

#include <stdio.h>
#include <string.h>

/*
#include <sys/socket.h>
#include <resolv.h>
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>


#define MI_PUERTO 8080 //esto va en el archivo configuracion
#define BACKLOG 10 //esto va en el archivo configuracion


void mensaje_error(int e){
printf("error!!!, %d\n",e);
return;
}


int main(){

int sockfd; //declaro el descriptor del socket

int addrlen = sizeof(struct sockaddr); //SINO FUNCIONA PROBAR CON sizeof(struct sockaddr_in)

struct sockaddr_in my_addr; // creo la estructura sockaddr_in


//inicializo la estructura sockaddr_in
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MI_PUERTO); // Designa numero de puerto por donde escuchara el servidor
my_addr.sin_addr.s_addr = htonl (INADDR_ANY); // IP de la interface por donde escuchara el servidor, en este caso permite IP de cualquier host

struct sockaddr_in client_addr; //DNI del cliente

//si no hay error, creo el socket
if((sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1))
{mensaje_error(0); return 1;}

//si no hay error, pido el puerto
//extern int errno; /*"SI NO FUNCIONA PROBA DESCOMENTAR ESTA LINEA Y BORRAR ESTO"*/
if(bind(sockfd, (struct sockaddr*) &my_addr, sizeof(my_addr))==-1) //otro tutorial me dice q si no es error retorna 0 ¿?
{mensaje_error(1); printf("errno = %d \n",errno); return 1;}



Y despues sigue.... alguien sabe porque razon en el bind, SIEMPRE me tira error??? (Y supuestamente tira error 88 "socket operation on non socket")
Teseracto escribió:Che, estamos teniendo el siguiente problema con el codigo:

#include <stdio.h>
#include <string.h>

/*
#include <sys/socket.h>
#include <resolv.h>
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>


#define MI_PUERTO 8080 //esto va en el archivo configuracion
#define BACKLOG 10 //esto va en el archivo configuracion


void mensaje_error(int e){
printf("error!!!, %d\n",e);
return;
}


int main(){

int sockfd; //declaro el descriptor del socket

int addrlen = sizeof(struct sockaddr); //SINO FUNCIONA PROBAR CON sizeof(struct sockaddr_in)

struct sockaddr_in my_addr; // creo la estructura sockaddr_in


//inicializo la estructura sockaddr_in
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MI_PUERTO); // Designa numero de puerto por donde escuchara el servidor
my_addr.sin_addr.s_addr = htonl (INADDR_ANY); // IP de la interface por donde escuchara el servidor, en este caso permite IP de cualquier host

struct sockaddr_in client_addr; //DNI del cliente

//si no hay error, creo el socket
if((sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1))
{mensaje_error(0); return 1;}

//si no hay error, pido el puerto
//extern int errno; /*"SI NO FUNCIONA PROBA DESCOMENTAR ESTA LINEA Y BORRAR ESTO"*/
if(bind(sockfd, (struct sockaddr*) &my_addr, sizeof(my_addr))==-1) //otro tutorial me dice q si no es error retorna 0 ¿?
{mensaje_error(1); printf("errno = %d \n",errno); return 1;}



Y despues sigue.... alguien sabe porque razon en el bind, SIEMPRE me tira error??? (Y supuestamente tira error 88 "socket operation on non socket")


Es porque creaste mal es socket me parece :P


Off-topic:
Cumbiancha.wma

Off-topic:
reyiyo, posteaste a las 4:17 am. si a esa hora estabas viendo el foro, te zarpás en geek.
imagino que llegaste mdio borracho del boliche, y te diste cuenta que habías dejado la pc prendida y el navegador abierto justo en este topic, sino estás un poco enfermo. jajaja.
Teseracto escribió:Che, estamos teniendo el siguiente problema con el codigo:

#include <stdio.h>
#include <string.h>

/*
#include <sys/socket.h>
#include <resolv.h>
*/

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>


#define MI_PUERTO 8080 //esto va en el archivo configuracion
#define BACKLOG 10 //esto va en el archivo configuracion


void mensaje_error(int e){
printf("error!!!, %d\n",e);
return;
}


int main(){

int sockfd; //declaro el descriptor del socket

int addrlen = sizeof(struct sockaddr); //SINO FUNCIONA PROBAR CON sizeof(struct sockaddr_in)

struct sockaddr_in my_addr; // creo la estructura sockaddr_in


//inicializo la estructura sockaddr_in
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MI_PUERTO); // Designa numero de puerto por donde escuchara el servidor
my_addr.sin_addr.s_addr = htonl (INADDR_ANY); // IP de la interface por donde escuchara el servidor, en este caso permite IP de cualquier host

struct sockaddr_in client_addr; //DNI del cliente

//si no hay error, creo el socket
if((sockfd = socket(AF_INET, SOCK_STREAM, 0) == -1))
{mensaje_error(0); return 1;}

//si no hay error, pido el puerto
//extern int errno; /*"SI NO FUNCIONA PROBA DESCOMENTAR ESTA LINEA Y BORRAR ESTO"*/
if(bind(sockfd, (struct sockaddr*) &my_addr, sizeof(my_addr))==-1) //otro tutorial me dice q si no es error retorna 0 ¿?
{mensaje_error(1); printf("errno = %d \n",errno); return 1;}



Y despues sigue.... alguien sabe porque razon en el bind, SIEMPRE me tira error??? (Y supuestamente tira error 88 "socket operation on non socket")
La estructura client_addr la tenés que crear antes de empezar a inicializar tu dirección (my_addr).

Ya que estoy, una pregunta. Tengo el server ya hecho y funciona, probé con un cliente que se conecta y conecta perfectamente, pero después, cuando quiero hacer otra cosa, ya sea cerrar la conexión o enviarle algo, se queda en el select y no recibe nada. Cuando pruebo cerrar la conexión, el cliente la cierra perfectamente, pero el servidor no toma eso y se queda en el select esperando, tienen idea a que se puede deber? No posteo el codigo porque es un poco extenso, si necesitan ver algo me avisan.

Saludos.
Select todavia no lo vimos :S...

Intentaste crear un proceso que se encarge de la conexion en si, y otro con el select?
Teseracto escribió:Select todavia no lo vimos Confused...

Intentaste crear un proceso que se encarge de la conexion en si, y otro con el select?

la conexion y el select se pueden hacer en el mismo proceso sin problemas.
Fijate si agregaste el socket correspondiente al select, no me acuerdo bien la funcion pero alguien te va a saber decir. Y creo que habria que reagregarlo cada vez que pasa por el select. Dsp si me acuerdo veo de postear el codigo mio de esa aprte para que vean a q me refiero
Ponganse a ver el select ya entonces, es muy necesario...
Gracias por las respuestas, ya lo hicimos funcionar, era una boludez.

Saludos
Páginas: 1 2
URLs de referencia