si ho poca esperienza ma son cose che devo imparare...

pero mi servirebbe risolvere questo problema :

volevo scrivere un programma che facesse lo scanner delle porte di un pc!!!

per farlo uso i socket non blocanti e ottengo questo errore
WSAEALREADY ...

questo è il codice :

code:


#include <stdio.h>
#include <winsock.h>

int main () {

WSADATA data;
int err = WSAStartup(MAKEWORD(2,2), &data), porta;
SOCKET sock;
SOCKADDR_IN sock_in;

unsigned long arg = 1;


if ( err != 0) printf("Libreria non inizializata, ERRORE %d \n", WSAGetLastError ());


sock = socket(PF_INET, SOCK_STREAM, 0);

if ( sock == INVALID_SOCKET)

printf("Funzione SOCKET non correta, ERRORE %d \n ", WSAGetLastError ());


err = ioctlsocket(sock, FIONBIO, &arg);

printf("Valore arg : %l", arg);


if ( err == SOCKET_ERROR)

printf("Funzione IOCTLSOCKET non riuscita, ERRORE %d \n", WSAGetLastError ());

sock_in.sin_family = AF_INET;
sock_in.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");


for ( porta = 0; porta <65535; porta++) {
sock_in.sin_port = porta;


err = connect(sock, (SOCKADDR *)&sock_in, sizeof(struct sockaddr));

if ( err == SOCKET_ERROR)

printf("Funzione CONNECT non riuscita, ERRORE %d \n", WSAGetLastError ());

else printf("Funzione connetc riuscita, porta %d\n", porta);

}



stavo pensando di usare la funzione select, ma non sono riuscito ad ottenere grandi risultati!!!

grazie