Premièrement, si ton WSAStartup() échoue, WSAGetLastError() n'est pas disponible:
int ret;
WSADATA wdata;
/*
WSAStartup() renvoie 0 si succès sinon, le code d'erreur
*/
if ( (ret = WSAStartup( WINSOCK_VERSION, &wdata )) )
{
cout << "error => " << ret << endl;
return 0;
}
/* notre version n'est pas disponible, pour éviter tout problème, on quitte */
if ( LOBYTE(WINSOCK_VERSION) != LOBYTE(wdata.wVersion) )
{
cout << "error => " << WSAVERNOTSUPPORTED << endl;
WSACleanup();
return 0;
}
/* faut pas oublier de lier la librairire aussi, sous Dev-C++ son nom est `libws2_32.a` je crois */
ensuite, pour créer un socket de type SOCK_STREAM(tcp/ip):
SOCKET ton_serveur = socket( AF_INET, SOCK_STREAM, IPPROTO_IP );
/* IPPROTO_IP peut être remplacé par 0 tout simplement */
dans ton code, W_IP est ton socket serveur, c'est sur ce dernier que tu dois appliquer le bind() et le listen().
lorsque tu assigne une adresse à la struct `sockaddr_in`, utilise htonl()
TonSockAddrIn.sin_addr.S_un.S_addr = htonl( INADDR_ANY );
pour rendre la chose encore plus `propre`, met le membre .sin_zero à zéro
memset( TonSockAddrIn.sin.zero, 0, sizeof(TonSockAddrIn.sin.zero) );
par la suite, absolument aucune connexion ne pourat être acceptée par ton serveur, ton listen() est à zéro => ne rien accepter
if ( SOCKET_ERROR != listen( W_IP, 5 ) )
cout << "GOOD!" << endl;
tu as maintenant une queue de 5 connexions simultanées.
tu as aussi la macro SOMAXCONN qui est définie dans winsock2.h
/* exemple: */
listen( W_IP, SOMAXCONN );
tu devrais regarder du coté de la fonction select(), elle te sera très utile.
lorsque tu accept une nouvelle connexion, utilise un autre socket:
sock_client = accept( W_IP, (struct sockaddr *)&client, sizeof(struct sockaddr_in) );
Pour information, sous Windows, le type SOCKET est un entier non signé.
typedef unsigned int SOCKET;
contrairement sous Linux ou c'est un entier signé, alors utilise soit: unsigned int ou SOCKET.
SOCKET ton_socket;
unsigned int ton_socket;
etc ... etc ... etc ...
Voilà un bon site sur Winsock =>
[ Lien ]Un autre =>
[ Lien ]Et un autre =>
[ Lien ]Un incontournable sous Windows =>
[ Lien ]Il y à des exemples sut tout ces sites, faqs, etc ...
~(.:: NitRic ::.)~