J'ai un problème assez embarrassant. Le code suivant ne créera tout simplement pas de socket sur Windows; il échoue et affiche le message d'erreur. Quelqu'un pourrait-il expliquer brièvement pourquoi cela pourrait être? Je suis incroyablement confus et frustré que quelque chose d'aussi simple échoue. Je vous remercie. EDIT: De même, l'impression d'un strerror (errno) indique simplement "No error".Impossible de créer une socket sous Windows
Répondre
Vous devez appeler WSAStartup()
avant que toutes les autres fonctions de socket fonctionnent sur Windows (et vous êtes censé appeler WSACleanup()
lorsque vous avez terminé).
Jerry Coffin a raison sur WSAStartup()
et WSACleanup()
.
Notez également que ce code
if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
est problématique car SOCKET
est un type non signé (unsigned int
).
De winsock.h
/*
* This is used instead of -1, since the
* SOCKET type is unsigned.
*/
#define INVALID_SOCKET (SOCKET)(~0)
#define SOCKET_ERROR (-1)
Ainsi, l'OMI il est préférable de remplacer cette ligne avec
if(INVALID_SOCKET == (sock = socket(AF_INET, SOCK_STREAM, 0)))
même si ce n'est pas la cause.
Exemple:
#include <Windows.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
int _cdecl main(){
WSADATA Data;
int socket; // or you can use SOCKET socket
WSAStartup(MAKEWORD(2, 2), &Data); // 2.2 version
socket = socket(AF_INET, SOCK_DGRAM, 0);
if(udep_socket<0){
printf("Error Creating Socket");
}else{
printf("Successfully Created Socket");
}
system("pause");
return 0;
}
pour le code de production, n'oubliez pas 'WSACleanup();' – Wolf
@Wolf merci pour suggestion. Apprécié. –
Merci ... de toute façon je reçois des winsock de travailler tout ce temps sans utiliser cette fonction. Très étrange. –
Vous utilisez probablement généralement un autre composant qui a besoin d'utiliser des sockets et qui fait le démarrage pour vous ... –