winsock accept() blockt?



  • Hallo, kann mir einer kurz sagen, warum in dem Code hier mein accept blockt und selbst wenn ich versuche auf port 25565 zu connecten immernoch nicht returned?

    Ist das erste mal socket programmierung für mich und wollte nur wissen ob mein Code so stimmt. (: Danke!

    bool MCServer::InitServer()
    {
    	WSADATA wsaData;
    	WORD wsaVersion = MAKEWORD( 2, 2 );
    
    	if( WSAStartup( wsaVersion, &wsaData ) )
    		return false;
    
    	_socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
    	if( _socket == INVALID_SOCKET )
    		return false;
    
    	// bind to port 25565
    	sockaddr_in bindaddr;
    	bindaddr.sin_addr.s_addr = INADDR_ANY;
    	bindaddr.sin_family = AF_INET;
    	bindaddr.sin_port = 25565;
    
    	if( bind( _socket, (sockaddr*) &bindaddr, sizeof(bindaddr) ) == SOCKET_ERROR )
    		return false;
    
    	// listen to new connections ..
    
    	if( listen( _socket, SOMAXCONN ) == SOCKET_ERROR )
    		return false;
    
    	// and accept one after the other ..
    
    	SOCKET curSocket;
    
    	while( true )
    	{
    		sockaddr_in client;
    		int size = sizeof(client);
    		curSocket = accept( _socket, (sockaddr*)&client, &size );
    
    		if( curSocket == INVALID_SOCKET )
    		{
    			continue;
    		}
    
    		std::cout << "yay!" << std::endl;
    	}
    
    	return true;
    }
    


  • > bindaddr.sin_port = 25565;

    Du musst die Network-Byte-Order beachten. Benutze htons(), denn dein accept() kehrt nicht zurück, weil du dich vmtl. nicht richtig verbindest.

    Du solltest IPv6 o. Dualstack-Sockets nutzen, IPv4 wird wohl bald veraltet sein.



  • Jodocus schrieb:

    > bindaddr.sin_port = 25565;

    Du musst die Network-Byte-Order beachten. Benutze htons(), denn dein accept() kehrt nicht zurück, weil du dich vmtl. nicht richtig verbindest.

    Du solltest IPv6 o. Dualstack-Sockets nutzen, IPv4 wird wohl bald veraltet sein.

    Danke das wars! 🙂


Anmelden zum Antworten