C++ Socket programmierung: Programm bricht bei write ab

Gast #4050026
Lesenswert?
• ▲
▼
Hallo,

ich schreibe an einer Applikation in C++ für ein embedded Linux 
Gerätchen. Es verbindet sich mit einem Netzwerksocket zu einem Server um 
Daten zu versenden. Beim Aufruf der Funktion

write(sockfd, temp.c_str(), temp.length())

beendet sich das Programm unmotiviert, wenn der Socket vom Server 
geschlossen wurde. Ich habe um das write einen try-catch Block, aber 
trotzdem ist einfach Schluss.

Hat jemand einen Tip?

Stefan
Gast #4050035
Lesenswert?
• ▲
▼
Stefan schrieb:
> Hat jemand einen Tip?

Ja, beim verwenden von C-APIs, auch in C++, Fehlerbehandlungen nach C 
Art und Weise des APIs, nicht nach C++ Art und Weise implementieren.

>> Return Value
>>
>> On success, the number of bytes written is returned (zero indicates
>> nothing was written). On error, -1 is returned, and errno is set
>> appropriately.
>>
>> If count is zero and fd refers to a regular file, then write() may
>> return a failure status if one of the errors below is detected. If no
>> errors are detected, 0 will be returned without causing any other
>> effect. If count is zero and fd refers to a file other than a regular
>> file, the results are not specified.
Gast #4050053
Lesenswert?
• ▲
▼
Stefan schrieb:
> Ok, danke, werde ich so umbauen, allerdings ist das Kernproblem
> unabhängig davon, dass das Programm sich einfach beendet wenn der Socket
> vom Server geschlossen wurde.

dann hast du woanders noch einen Fehler, write kann nicht dafür sorgen 
das das Programm beendet
#4050061
Lesenswert?
• ▲
▼
Peter II schrieb:
> dann hast du woanders noch einen Fehler, write kann nicht dafür sorgen
> das das Programm beendet

Die Frage ist wie gut ist der Protokoll Stack. Bei Windows und Linux 
würde ich sagen kann so ein Fehler nicht passieren, bei einem Embedded 
Linux, das mit der heissen Nadel für irgendeine neue Hardware gestrickt 
wurde, würde ich das nicht ausschliessen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.