2010-12-29 4 views
-1

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

+1

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. –

+0

@Andrew Ich denke, ich darf jetzt fragen, ich werde es tun. – SIFE

Antwort

2

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.).

+0

Ich habe einige mehr auf die Antwort hinzugefügt ... –

+0

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

+0

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). –

Verwandte Themen