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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren