C socket siempre me devuelve -1 [Winsock]

El problema de este post es que al momento de programar un miniservidor WEB

Este me marcaba lo siguiente:


Valor -1
socket: No error
 

El codigo de prueba es:

#include<winsock2.h>
#include<stdio.h>
#include<errno.h>

int main()    {
    int s;
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("Valor %i\n",s);
        perror("socket");
        return 1;
    }
}


Se compila de la siguiente manera:

gcc -o test.exe test.c -lws2_32 

Al parecer los pendejos de Micro$oft siempre saliendose de lo estandar para poder utilizar socket, necesitas inicializar el Winsock de la siguiente manera.

#include<winsock2.h>
#include<stdio.h>
#include<errno.h>

WSADATA *wsaData;

int main()    {
    int s,iResult;
    wsaData = calloc(1,sizeof(WSADATA));
    iResult = WSAStartup(MAKEWORD(2,2), wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed: %d\n", iResult);
        return 1;
    }
    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
        printf("Valor %i\n",s);
        perror("socket");
        return 1;
    }
}


Con lo cual el codigo ya no marca error y podremos continuar con las funciones clasicas para realizar bind, listen y connect

Posiblemente tambien se encuentre con la sorpresa de que el Socket devuelto por connect no es un FileDescriptor normal, si no uno de windows al cual no se le puede realizar fdopen y operaciones con read and write.

Saludos

Comentarios

Entradas populares de este blog

Clave WPA2 por Defecto de equipos TotalPlay (Huawei HG8245H)

Cable modem Ubee - WPA2 y WPS por defecto