C sendmsg() kein Pufferspeicher verfügbar

Ich bin kein Experte in C-Programmierung, aber ich bin versucht, zu schreiben, eine ziemlich einfache Programm mit sendmsg() und recvmsg() zum senden einer Nachricht zwischen einem client und einem server (beide sind auf der gleichen Maschine, also im Grunde ich ' m senden Sie eine Nachricht an localhost).

Nach der Initialisierung der benötigten Strukturen (wie in der iovec und die msghdr) und den erfolgreichen verbinden des Clients mit dem server, meine sendmsg () - Aufruf schlägt fehl mit "kein Pufferspeicher verfügbar" errno.

Dies ist, was linux-Mann-Berichte über diese Art von Fehler:

Die Ausgabe-Warteschlange eines Netzwerk-interface voll war. Dies weist im Allgemeinen darauf hin, dass die Schnittstelle hat aufgehört, aber vielleicht verursacht durch vorübergehende Verkehrsbehinderungen. (Normalerweise tritt dies nicht in Linux. Pakete werden nur im hintergrund gelöscht, wenn ein Gerät Warteschlange überläuft.)

Ich schaute mich im Internet um und als Ergebnis fand ich heraus, dass sendmsg() ist nicht weit verbreitet, und niemand könnte sich mit dieser Art von Fehler. Der einzige nützliche Rat, den ich fand, war zu überprüfen, eine eventuelle überschreitung des sockets öffnen, aber wieder habe ich das immer in der Nähe JEDER Steckdose, die ich erstellen.

So, ich bin stecken, im Grunde, weil Sie ziemlich der noob ich weiß nicht genau, wo Sie suchen zu lösen diese Art von problem.

Wenn jemand weiß, wie es weitergehen soll, wäre es toll.
(Und bitte nicht mir sagen, nicht zu verwenden sendmsg(), weil der ganze Zweck meiner Arbeit ist es, zu verstehen, dieser Systemaufruf, und nicht das senden einer Nachricht an mich)

Hier ist der code, den ich geschrieben habe, die bisher auf pastebin: client und server

--GELÖST--

Danke Ihnen sehr. Ich habe in der Lage, das problem zu lösen und ich behoben, die anderen Fehler die ich gemacht habe, also hier ist der funktionierende code für sendmsg() und recvmsg() arbeiten message-passing: Client und Server

  • Ist dies für TCP-oder UDP?
  • - oder unix-domain (oder socketpair)?
  • Du meinst die ENOBUFS Fehler, richtig? Nun, das ist in der Tat merkwürdig. Können Sie ein minimal-test-Fall, wo es passiert, also jemand anderes kann versuchen Reproduktion?
  • Ich benutze einen verbindungsorientierten AF_INET-socket (type SOCK_STREAM), also TCP.
  • Bitte zeigen Sie einige code.
  • Hier ist, was ich bisher getan habe: - client --> link server --> link Es ist wirklich basic-code, aber wie gesagt ich bin eher der noob.
  • Bitte beachten Sie, wie schnell Sie bekam Antworten, sobald Sie zeigte Ihren code. Fühlen Sie sich frei, um Schlussfolgerungen zu ziehen in Bezug auf den relativen Wert von a) sprechen Beschreibung von code, und b) die eigentliche code. Vor allem, wenn es bekannt ist, dass der code ein oder mehrere Fehler sind ...
  • Sorry, aber es ist auch das erste mal, dass ich eine Frage stellen online. Ich werde es mir merken beim nächsten mal. Danke.

InformationsquelleAutor xHawk | 2012-10-10
Schreibe einen Kommentar