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; }