[Mac OS X] connect immer erfolgreich



  • Hallo Leute!

    Ich hoffe mal, ich bin hier richtig aufgehoben. Ich versuche gerade, ein erstes Programm zu schreiben, das das SCTP Protokoll benutzt. Dazu habe ich die SCTP kext von https://nplab.fh-muenster.de/groups/wiki/wiki/3d084/SCTP_on_Lion.html laut Anleitung installiert.

    Zum testen habe ich einen Client geschrieben, der sich einfach mal verbinden soll.

    #include <cerrno>
    #include <cstring>
    #include <iostream>
    #include <stdexcept>
    #include <string>
    
    #include <arpa/inet.h>
    #include <netinet/in.h>
    #include <netinet/sctp_uio.h>
    #include <netinet/sctp.h>
    #include <sys/socket.h>
    #include <unistd.h>
    
    int main()
    {
    	auto sockfd = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
    
    	if(sockfd == -1)
    	{
    		std::cerr << "error creating socket\n";
    		return -1;
    	}
    
    	sockaddr_in saddr = {};
    	saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
    	saddr.sin_family = AF_INET;
    	saddr.sin_len = sizeof saddr;
    	saddr.sin_port = htons(12345);
    
    	if(connect(sockfd, reinterpret_cast<sockaddr*>(&saddr), sizeof saddr) == -1)
    	{
    		std::cerr << "error connecting\n";
    		return -2;
    	}
    
    	std::cout << "success\n";
    }
    

    Nun ist connect() aber immer erfolgreich, egal ob ein Server auf diesem Port laeuft oder nicht. Und wenn ein Server laeuft, dann bekomme ich zwar mit Wireshark den Verbindungsaufbau mit, aber accept() kehrt am Server nie zurueck.

    Bin langsam echt ratlos, die Informationen zu SCTP im Internet sind echt duerftig 😞

    Gruesse,
    Der Kellerautomat



  • Beispiele im Netz sehen etwas anders aus: http://www.ibm.com/developerworks/library/l-sctp/ insbesondere

    auto sockfd = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);
    

    Alle Beispiele mit SOCK_SEQPACKET, die ich gesehen habe, setzen noch irgendwelche Socket-Optionen. Auch habe ich mich nur kurz damit beschaeftigt, aber zu SCTP gibt es ne Menge Informationen.

    meine Suchbegriffe bei google: sctp simple examples



  • Sobald ich das Beispielprogramm aendere, sodass es SOCK_SEQPACKET verwendet, funktioniert es auch nicht mehr mit den selben Symptomen. Zu benoetigten Socket-Optionen habe ich nichts gefunden.



  • Offenbar ist SCTP SOCK_SEQPACKET doch nicht connection-basiert und eher UDP-maessig, also gibt es kein accept/connect? Die Beispiele im Internet sind jedenfalls widerspruechig. Mal gibts ein accept, mal wieder nicht. 😕

    Habe ich "one-to-one style interface" etwa missverstanden? Von den Features her sind beide interface styles (SOCK_STREAM vs SOCK_SEQPACKET) gleichwertig? Warum sollte man SOCK_SEQPACKET dann ueberhaupt verwenden? Ich dachte man braucht das, um SCTP vollstaendig nutzen zu koennen? 😕


Anmelden zum Antworten