Faccio una precisazione su quello che ha detto shodan : l' argomento della funzione htons deve essere un intero, quindi devi prima convertire la stringa di caratteri in un intero, e poi chiamare htons con quel valore :

mio_indirizzo.sin_port=htons(atoi(porta));


Poi, quando chiami una funzione di Winsock ti conviene inserire dei costrutti per segnalare errori provenienti da suddette funzioni ; per esempio :

codice:
    if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
        printf("Error listening on socket.\n");
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }