Retour de valeur de la fonction connect (socket) en C
Bonjour,
je suis en train de developper en client socket TCP en C et un serveur socket TCP en Python mon programme fonctionne trés bien. ils se connectent et se repondent MAIS bizarrerie de la nature , meme si ma fonction connect du client , se connecte bien au serveur, elle me renvoie -1 !
je vous donne mon code de ma fonction connect :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int
net_socket_connect_tcp( int net_socket, const char * host, int numeric, const char * service )
{
struct net_addr * net_addr = NULL;
int addr_count;
int test;
if (check(service != NULL, "Argument service is NULL"))
{
addr_count = net_addr_get_addrinfo(host, numeric, service, &net_addr);
if (check_not(addr_count == -1, "error form net_addr_get_addr_info"))
{
return -1;
}
test = connect(net_socket,&net_addr->addr, net_addr->len);
fprintf(stdout,"%d",test);
if (test < 0)
{
trace_err("Can't connect to the server");
}
return 0;
}
return -1;
} |
et ci joins le code du main du client qui initialise la socket, la bind, la connecte au serveur etc ...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include "common.h"
static struct sys_events * sys_events;
static void
event_read_cb (struct sys_events * sys_events, struct sys_event * event );
static struct sys_event_callback read_callback = { event_read_cb, 0 };
int main ( int argc, char ** argv )
{
int socket_index, socket_count = -1;
int * socket_array = NULL;
if (check_not(net_socket_initialize() != 0, "Can't initialize sockets"))
{
return 1;
}
if (check_not(net_types_check_sizes() != 0, "Invalid types size"))
{
return 1;
}
sys_events = sys_events_create(32);
assert(sys_events != NULL, "");
socket_count = net_socket_bind_all_tcp(NULL, 1, "0", &socket_array);
for (socket_index = 0; socket_index < socket_count; ++socket_index)
{
net_socket_connect_tcp(socket_array[socket_index], "127.0.0.1", 1, "9000");
}
for (socket_index = 0; socket_index < socket_count; ++socket_index)
{
sys_events_set_callback(sys_events, SYS_EVENT_READ, socket_array[socket_index], &read_callback);
}
while (sys_events_update(sys_events, SYS_EVENTS_INFINITE) == 0){}
net_socket_close_all((unsigned int)(socket_count), socket_array);
sys_events_delete(sys_events);
net_socket_terminate();
return 0;
}
void
event_read_cb( struct sys_events * sys_events, struct sys_event * event )
{
char send_msg[14] = "I'm the client";
unsigned int send_len = sizeof(send_msg);
char rcv_msg[256];
unsigned int rcv_len = 256;
if (event->reason == SYS_EVENT_ERROR)
{
trace_err("SOCKET_ERROR");
return;
}
if (net_socket_recv_tcp(event->ident,rcv_msg,&rcv_len) == NET_SOCKET_OK)
{
rcv_msg[rcv_len] = '\0';
trace_msg(rcv_msg);
}
else
{
trace_err("SOCKET RECV ERROR");
}
if (net_socket_send_tcp(event->ident,send_msg,send_len) != NET_SOCKET_OK)
{
trace_err("SOCKET SEND ERROR");
}
} |
Quelqu'un aurais t'il une idée car je travaille sur un gros projet et j'aimerais faire du code vraiment propre :(
Merci d'avance
Probleme de socket avec API Windows
mon probleme vient t'il de l'initilialisation de ma socket ?
je vous donne le code ci dessous sachant que pour le moment je lance mon serveur / client en local sous XP SP2.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int
net_socket_initialize ( void )
{
#if FREEAGE_TARGET == FREEAGE_TARGET_WINDOWS
WORD wVersionRequested;
WSADATA wsaData;
# if defined(FREEAGE_TARGET_WINDOWS_SERVER_2008)
wVersionRequested = MAKEWORD( 2, 2 );
# elif defined(FREEAGE_TARGET_WINDOWS_SERVER_2003)
wVersionRequested = MAKEWORD( 2, 0 );
# endif
if (check_not(WSAStartup(wVersionRequested, &wsaData) != 0, "Error from WSAStartup"))
{
return -1;
}
#endif
return 0;
} |
Merci d'avance car je bloque depuis un moment la dessus.