getservbyport und getservbyname



  • hi,

    Ich komme irgendwie mit meinem Programm nicht weiter !
    Ich geb übergeb meinem Programm über ein Kommandozeilenargument eine Portnummer oder einen Dienstnamen und will dazu den Dienstnamen oder die Portnummer und evtl Aliase erhalten !

    Nur kommt dauernd "no such service found", egal was ich eingebe !
    Die jeweilige Funktion (getservbyport oder getservbyname), die aufgerufen wird, gibt anscheinend 0 oder nen Error zurück, hab bloß keine Ahnung wieso !

    Hier der Code dazu:

    #include <iostream>
    #include <WinSock2.h>
    #include <string>
    using namespace std;
    
    int resolve (const char *servername)
    {
    	// Infos zu den Diensten
    	struct servent *serv;
    	unsigned short port;
    
    	// handelt es sich um eine Portnummer ?
    	port = (unsigned short)strtoul(servername, NULL, 0);
    
    	if (port)
    	{
    		serv = getservbyport(htons(port), "tcp");
    	}
    	else
    	{
    		serv = getservbyname(servername, "tcp");
    	}
    	if (serv == 0)
    	{
    		cerr << "No such service found" << endl;
    		return 1;
    	}
    
    	port = ntohs(serv->s_port);
    	cout << port << " -> " << serv->s_name << endl;
    
    	// durch Liste mit Aliasen
    	for (int i = 0; serv->s_aliases[i] != NULL; i++)
    	{
    		cout << port << " -> " << serv->s_aliases[i] << " (Alias)" << endl;
    	}
    	return 0;
    }
    
    int main(int argc, char *argv[])
    {
    	for (int n = 1; n < argc; n++)
    	{
    		resolve(argv[n]);
    	}
    
    	return 0;
    }
    

    Bin bloß irgendwie zu dumm dazu, das zu kapieren !

    Hoffe, ihr könnt mir weiterhelfen !

    mfg



  • Naja, ich würde mal sagen Du hast vergessen "WSAStartup" aufzurufen...
    Füge noch ganz am Anfang in main Folgendes hinzu, dann geht es:

    WORD wVersionRequested;
      WSADATA wsaData;
      wVersionRequested = MAKEWORD( 2, 2 );
      int err = WSAStartup( wVersionRequested, &wsaData );
      if ( err != 0 ) {
        /* Tell the user that we could not find a usable */
        /* WinSock DLL.                                  */
        return 1;
      }
    


  • ah stimmt ja, total vergessen

    ich danke dir 👍

    mfg


Log in to reply