RTFM

Durch einen bislang unbekannten Fehler ließ sich eine in Entwicklung befindliche Software unter Microsoft Windows nicht korrekt ausführen (ich muss dazu sagen, dass das Programm unter allen üblichen Betriebssystemen lauffähig ist sein soll). Ich habe den Fehler eben auf die Low-Level-Netzwerkfunktionen reduzieren können - um genau zu sein kam select() nicht mit dem übergebenen fd_set zurecht.

(Sorry, wenn ich nun ein paar weniger Programmier-affine Leser langweile:)

Die Lösung steht sogar in der MSDN-Doku, man muss sie nur suchen finden:

Internally, socket handles in an fd_set structure are not represented as bit flags as in Berkeley Unix. Their data representation is opaque. Use of these macros will maintain software portability between different socket environments.

Und da liegt auch schon der Hund begraben: für die FD_SET-Makros habe ich eigene Ersatzfunktionen programmiert, weil die meisten vordefinierten Makros (z.B. von der glibc) einen Buffer Overflow ermöglichen würden.
Da ich unter Unix-Systemen aber mit Bitmasken herumrechne, komme ich unter Windows mit einem völlig anders gearteten fd_set-Array nicht zurecht. Naja, Problem erkannt, Problem beseitigt, und schon geht’s mir wieder etwas besser. :-)

Einen Kommentar schreiben