Zuerst tut mir leid für die Buchung Code als hässlicher Stil, wusste ich nicht das richtige Tag für das Styling, jetzt zurück zu meinem Code wie hier geschrieben: Simple socket library need some check Mein Problem jetzt mit dem Server I create based in der vorherigen Bibliothek, gibt es -1 zurück, wenn ich socket_open anrufe, wessen Aussehen es ist scheitern, Socket zu erstellen, habe ich versucht, es zu debuggen, aber ich habe das Problem nicht gelöst.Einfache Socket-Bibliothek muss überprüft werden
Antwort
Es sieht aus wie im Socket-Aufruf das Protokoll und Typ rückwärts sind. Sie wollen, dies zu tun:
int s = socket(AF_INET, SOCK_STREAM, 0);
Aber die Art und Weise Sie Protokoll und geben Sie in das Hauptprogramm stellen Sie den Anruf Marke:
int s = socket(AF_INET, 0, SOCK_STREAM);
Wo sind Sie falsch:
1: In STEST .c Sie diesen Satz:
socket->domain = AF_INET;
socket->type = SOCK_STREAM;
socket->protocol = 0;
Dies sollte:
socket->domain = AF_INET;
socket->protocol = SOCK_STREAM
socket->type = 0;
2: OpenSocket.c
Wenn Sie den Rückgabecode von Steckdose prüfen Sie prüfen für fd Null ist. Null zeigt keinen Fehler an; -1 bedeutet, dass es fehlgeschlagen ist. socket_connect hat das gleiche Problem.
3: Sie übergeben Strukturen auch nach Wert anstatt nach Referenz. Dies funktioniert möglicherweise nicht wie gewünscht, wenn Sie davon ausgehen, dass Werte, die in den Strukturen in der Socket-Bibliothek aktualisiert wurden, von der aufrufenden Funktion erkannt werden.
4: Es gibt einen Speicherverlust in socket_recv_len und einen möglichen Speicherverlust in socket_recv. Der Puffer, den du malloc erhältst, wird nicht freigegeben, wird aber nicht an den Aufrufer zurückgegeben, damit er sie freigeben kann.
5: Bei den Systemaufrufen send und recv bedeutet ein Rückgabecode von Null, dass die Verbindung ordnungsgemäß geschlossen wurde. Ein Return-Code von -1 bedeutet einen Fehler (Verbindung abgebrochen usw.).
Ich habe einige mehr auf die Antwort hinzugefügt ... –
Jetzt kann es Socket erstellen, aber es kann nicht hören, ich denke, das Problem in dieser Zeile: tsock-> sin_addr.s_addr = inet_addr (Adresse); Byway, wie ich neue Zeile in diesem kleinen Editor starten kann. – SIFE
Sie rufen Bindung mit den falschen Parametern auf, weil Sock_i ist ein Zeiger auf sockaddr_in und dann übergeben Sie die Adresse einer Sock_i, dann übergeben Sie sockaddr_in ** anstelle von Sockaddr_in * (die Besetzung löst dieses Problem nicht) und schließlich Sie übergeben die Größe von Sock_i (4 Byte) statt der Größe von Sockaddr_in (16 Byte). –
- 1. Checkbox muss auf bestimmte ID überprüft werden
- 2. Muss ich einfache Klassenmitgliedsvariablen initialisieren?
- 3. Muss überprüft werden, ob das Element ein Attribut hat?
- 4. Einfache Wecker und Zeit überprüft jede Sekunde
- 5. jQuery: Radiobuttons werden nicht überprüft
- 6. Eckige Kontrollkästchen werden nicht überprüft?
- 7. PHP-Erweiterung "curl" muss geladen werden
- 8. Wie Checkboxen dynamisch überprüft werden?
- 9. Die Checkboxliste muss anhand der im DB gespeicherten Werte überprüft werden.
- 10. Warum muss die Zuordnung von einem Typ zum selben überprüft werden?
- 11. NSDictionary - Muss überprüft werden, ob Wörterbuch enthält Schlüssel-Wert-Paar oder nicht
- 12. Android - Wie kann die Aktivität überprüft werden?
- 13. Warum werden Ausnahmen in .NET nicht überprüft?
- 14. Muss ich einen Trigger für eine solche einfache Einschränkung schreiben?
- 15. muss behoben werden Tkinter Fehler
- 16. Variable muss eingeschränkt werden Fehler
- 17. Variable 'runnable' initialisiert werden muss
- 18. Muss Caffe Daten gemischt werden?
- 19. Wann muss GetHashCode() überschrieben werden?
- 20. Muss jede Tabelle normalisiert werden?
- 21. Muss HttpWebRequest geschlossen werden? Wie
- 22. IF-Anweisung wiederholt werden muss
- 23. Muss std :: map initialisiert werden?
- 24. Wo muss @Override eingegeben werden?
- 25. Muss die Methode synchronisiert werden?
- 26. Muss neu immer gelöscht werden?
- 27. Element Linearlayout deklariert werden muss
- 28. Wann muss -halteCount verwendet werden?
- 29. Dolch ApplicationComponent muss eingestellt werden
- 30. Was muss `SPARK_HOME` eingestellt werden?
Ich weiß nicht, ob Sie Fragen noch einmal posten dürfen, aber im Allgemeinen ist es besser, vorhandene Fragen zu bearbeiten, anstatt eine Frage zu erstellen, in der eine frühere Frage erwähnt wird. –
@Andrew Ich denke, ich darf jetzt fragen, ich werde es tun. – SIFE