Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/04/2015, 16:10
Reynolds
 
Fecha de Ingreso: febrero-2015
Ubicación: France
Mensajes: 12
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Sockets Congelado

He intentado este codigo con un servidor mio. Me parece funcionar, incluso sin O_NONBLOCK :


Código:
#include <stdio.h>
#include <stdlib.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <errno.h>
#include <arpa/inet.h>
#include <fcntl.h>
	

int main()
{
	int puerto = 1025;
	char *ip = "127.0.0.1";
	struct sockaddr_in tcppeer;
	int tcp_socket;
	
	tcppeer.sin_family = AF_INET;
	tcppeer.sin_port = htons(puerto);
	tcppeer.sin_addr.s_addr = inet_addr(ip);

	tcp_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

	if (tcp_socket > 0)
	{
		printf("opened succesfully\n");
	}
	else 
	{
		fprintf(stderr, " opening error : %d \n", errno);

	}

	if (connect(tcp_socket, (struct sockaddr*)&tcppeer, sizeof(tcppeer)))
	{
		shutdown(tcp_socket, SHUT_RDWR);
		fprintf(stderr, "Unable to connect server :host %s: %u, error: %d \n", ip, puerto, errno);
	}

}
Si el servidor esta conectado hay "opened succesfully" escrito,
y si no esta conectado hay inmediato : "Unable to connect server :host 127.0.0.1: 1025, error: 107" escrito en la pantalla (107 porque errno 107 es "ENOTCONN").

Pienso que el problema de tiempo es dentro la funcion "closesocket()" o "WSAGetLastError()". ¿ Que son sus implementaciónes ? ¿Podrias intentar eso y decir que se pasa ? :


Código:
if (connect(tcp_socket, (struct sockaddr*)&tcppeer, sizeof(tcppeer)))
{
        fprint(stderr, "punto uno\n");
		closesocket(tcp_socket);
		sprintf(temp, "Unable to connect server :host %s: %u, error: %u \n", ip, puerto, WSAGetLastError());
        fprint(stderr, "punto dos");
		WriteDebug("a", temp);
		rt = off;
}