int enviarMensaje(int socketCliente, void* buffer,int tamanioBuffer){//Aca hay un problema con sizeof() que siempre devuelve 4

	//int tamanio=sizeof(buffer);

	int enviador = send(socketCliente, buffer,tamanioBuffer, 0);//Envia mensaje

	validarError(enviador, "Error al enviar el mensaje");

	return enviador;
}
int crearSocket(){

	int socketNuevo;

	socketNuevo = socket(AF_INET, SOCK_STREAM, 0);

	validarError(socketNuevo,"Error al crear el socket\n");

	return socketNuevo;
}
int recibirMensaje(int socketCliente, void* buffer,int tamanioBuffer){

	//int tamanio=sizeof(buffer);

	int mensajeRecibido = recv(socketCliente, buffer,tamanioBuffer,0);//Recibe mensaje

	validarError(mensajeRecibido,"Error de recepcion de datos");

	return mensajeRecibido;

}
void asociarAPuerto(int socket, int puerto){

	obviarErrorDeIpEnUso(socket);

	struct sockaddr_in servidor;
	servidor.sin_family = AF_INET;
	servidor.sin_port = htons(puerto);
	servidor.sin_addr.s_addr = INADDR_ANY;

	memset(&(servidor.sin_zero), '\0', 8);

	int conexion = bind(socket,(struct sockaddr*) &servidor,sizeof(servidor));

	validarError(conexion, "No se puede enlazar el puerto: direccion ya esta en uso\n");
}
int crearSocketParaAceptarSolicitudes(int socketServidor){
	/*int socketAceptarSolicitud = accept(socket, NULL, 0);
	validarError(socketAceptarSolicitud, "Error al aceptar solicitudes\n");*/ //forma de Internet

	//creo un cliente
	struct sockaddr_in cliente;

	unsigned int tamanioCliente = sizeof(cliente);

	//acepto solicitud
	int socketAceptarSolicitud = accept(socketServidor,(struct sockaddr*) &cliente,&tamanioCliente);

	validarError(socketAceptarSolicitud, "Error al aceptar solicitudes\n");

	return socketAceptarSolicitud;
}
void escucharConexiones(int socket, int maximasConexionesEntrantes){

		int escuchar = listen(socket, maximasConexionesEntrantes);

		validarError(escuchar, "Error al escuchar conecciones\n");
	}
int
main(int argc, char *argv[]) {

  int s;
  fd_set readfds, execptfds;
  int nFds;
  int ns;

  if (argc != 2) {
    usage(argv[0], "namesocket");
  }

  s = mksocket(argv[1]);
  
  if (s < 0) {
    fprintf(stderr, "No se pudo crear un socket %d %s\n", 
	    errno, strerror(errno));
    exit(1);
  }
  
  listen(s, 5);

  if ((ns = accept(s, NULL, NULL)) < 0) {
    fprintf(stderr, "No se pudo aceptar una conexion %d %s\n", 
	    errno, strerror(errno));
    exit(1);
  }
    
  while (1) {

    FD_ZERO(&readfds);
    FD_ZERO(&execptfds);
    
    FD_SET(0, &readfds);
    FD_SET(ns, &readfds);
    FD_SET(0, &execptfds);
    FD_SET(ns, &execptfds);

    nFds = select(ns + 1, &readfds, NULL, &execptfds, NULL);

    if (nFds > 0) {
      if (leerEscribir(&readfds, 0, ns) < 0) {
	fprintf(stderr, "Error en la lectura: %d %s\n",
		errno, strerror(errno));
	exit(1);
      }
      
      if (leerEscribir(&readfds, ns, 1) < 0) {
	fprintf(stderr, "Error en la lectura: %d %s\n",
		errno, strerror(errno));
	exit(1);
      }

      if (validarError(&execptfds, 0) < 0) {
	fprintf(stderr, "Error en la lectura: %d %s\n",
		errno, strerror(errno));
	exit(1);
      }

      if (validarError(&execptfds, s) < 0) {
	fprintf(stderr, "Error en la lectura: %d %s\n",
		errno, strerror(errno));
	exit(1);
      }	
    }

  }
  
  exit(0);
  return 0;
}