2010-01-08 4 views
1

Je tester une application Socket Server dans c et je reçois une erreur sur la fonction de liaison avec le code 10038. j'ai regardé ce et MSDN dit que cela signifie:Erreur Bind 10038 avec Windows application prise en c

Une opération a été tentée sur quelque chose qui n'est pas une socket. Soit le paramètre de handle de socket ne référence pas un socket valide, soit, pour select, un membre d'un fd_set n'était pas valide.

Voici le code:

// Je correct inclure des fichiers tels que comprennent, mais stackoverflow l'affiche bizarre quand je l'ai mis #include WINSOCK2.H

int main() 
{ 
WSADATA   wsaData; 
SOCKET   ListeningSocket; 
SOCKET   NewConnection; 
SOCKADDR_IN  ServerAddr; 
int    Port = 5150; 


if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) 
{ 
    printf("Server: WSAStartup failed with error %ld\n",WSAGetLastError()); 
    return -1; 
} 
else 
{ 
     printf("Server: The Winsock dll found!\n"); 
     printf("Server: The current status is: %s.\n",wsaData.szSystemStatus); 
} 

if(LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) 
{ 
    printf("Server: The dll do not support Winsock version 
      %u.%u!\n",LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion)); 
    WSACleanup(); 
    return -1; 
} 
else 
{ 
    printf("Server: The dll supports the Winsock version %u.%u!\n",LOBYTE(wsaData.wVersion),HIBYTE(wsaData.wVersion)); 
    printf("Server: The highest version this dll can support: %u.%u\n",LOBYTE(wsaData.wHighVersion),HIBYTE(wsaData.wHighVersion)); 
} 

ListeningSocket == socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

if(ListeningSocket == INVALID_SOCKET) 
{ 
    printf("Server: Error at socket(), error code: %ld\n",WSAGetLastError()); 
    WSACleanup(); 
    return -1; 
} 
else 
    printf("Server: socket() is OK!\n"); 

ServerAddr.sin_family = AF_INET; 
ServerAddr.sin_port = htons(Port); 
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); 

if(bind(ListeningSocket, (SOCKADDR *)&ServerAddr,sizeof(ServerAddr)) == SOCKET_ERROR) 
{ 

    printf("Server: bind() failed! Error code: %ld.\n",WSAGetLastError()); 
    closesocket(ListeningSocket); 
    WSACleanup(); 
    return -1; 
} 
else 
    printf("Server: bind() is OK!\n"); 

if(listen(ListeningSocket,5) == SOCKET_ERROR) 
{ 
     printf("Server: listen(): Error listening on socket %ld.\n", WSAGetLastError()); 
     closesocket(ListeningSocket); 
     WSACleanup(); 
     return -1; 
} 
else 
     printf("Server: listen() is OK, I'm waiting for connections...\n"); 

printf("Server: accept() is ready...\n"); 


while(1) 
{ 
     NewConnection = SOCKET_ERROR; 

     while(NewConnection == SOCKET_ERROR) 
     { 
      NewConnection = accept(ListeningSocket, NULL, NULL); 
     } 

     printf("Server: accept() is OK...\n"); 
     printf("Server: Client connected, ready for receiving and sending data...\n"); 

     ListeningSocket = NewConnection; 

     break; 
} 

if(closesocket(NewConnection) != 0) 
    printf("Server: Cannot close \"NewConnection\" socket. Error code: %ld\n", 
      WSAGetLastError()); 
else 
     printf("Server: Closing \"NewConnection\" socket...\n"); 

if(WSACleanup() != 0) 
     printf("Server: WSACleanup() failed! Error code: %ld\n", WSAGetLastError()); 
else 
     printf("Server: WSACleanup() is OK...\n"); 


return 0; 

}

Répondre

0

Je viens de recevoir, je mets == pour

ListeningSocket == socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 

instea de =

ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); 
+0

je me sens comme un idiot. – Xaisoft

+0

depuis que vous avez fait l'erreur à nouveau dans votre réponse ... – bmargulies

+0

oui merci de souligner que mon pote. – Xaisoft