Winsock - Blocking Socket



  • Hallo,
    Ich habe ein Problem mit Winsock.

    Ich verwende C++, um eine Wifi - Verbindung mit meinem DS herzustellen,
    doch es funktioniert nur mit blockierenden Sockets (keine Ahnung warum)

    Kann mir einer von euch sagen, wie man in Winsock solche Sockets erstellt ?

    Standartmäßig sind sie ja nicht-blockierend...



  • DarkShadow44 schrieb:

    Standartmäßig sind sie ja nicht-blockierend...

    doch



  • struct sockaddr_in i_addr;
    	i_addr.sin_family = AF_INET;
    	i_addr.sin_port = htons(6666);
    	i_addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
    
    	char optval = 1;
    
    	if(server)
    	{
    		ServerSockListen=socket(AF_INET, SOCK_DGRAM, 0);
    
    		bind(ServerSockListen, (struct sockaddr *) &i_addr, sizeof(i_addr));
    
    		int i=0;
    		char buffer[10];
    		memset(buffer,'\0',10);
    		while(1)
    		{
    
    			int size=sizeof(struct sockaddr);
    
    			recvfrom(ServerSockListen,buffer,8,0, (struct sockaddr *) &i_addr, &size);
    

    Aber bei recvfrom wartet es nicht...

    Es füllt den buffer immer mit ... NICHTS



  • ich lege dir das prüfen der rückabewerte bzw. GetLastError/WSAGetLastError ans herzen.



  • DarkShadow44 schrieb:

    Aber bei recvfrom wartet es nicht...

    Hehe, das haben nicht-blockierende Funktionen so an sich.



  • Danke. Er wollte zum Empfangen nur INADDR_ANY und nicht INADDR_BROADCAST. Ich dachte bloß wenn es auf dem DS funktioniert, dann klappt es auch auf dem PC... 🙄

    Aber es bricht immer nach 32 empfangenen Paketen ab, weißt du vielleicht warum ?

    Und warum muss der Server zuerst starten ? Er müsste die Pakete doch auch empfangen, wenn der Client schon länger sendet, oder nicht ?


Anmelden zum Antworten