Sunday, 23. September 2007T-Mobile Internet (web'n'walk) mit externer IP
Web'n'walk von T-Mobile ist ansich ein praktischer mobiler Internetzugang.
Die Standardinstallation hat nur leider einen "Schönheitsfehler": Wählt man sich ins Internet ein, so bekommt man eine interne Klasse A-Adresse (10.x.x.x) zugeteilt anstatt einer externen IP. Alle VErbindungen auf die externe IP werden außerdem nicht durchgeschleift, sodass man praktisch vollständig gefirewalled ist. Das ist natürlich äußerst unpraktisch denn z.B. für Remoteadministration usw. ist eine externe IP doch recht praktisch. Glücklicherweise ist das Problem relativ einfach zu umgehen, indem man einfach den APN wechselt. Dies mann man entweder im web'n'walk Manager Tool bewerkstelligen, indem man einfach ein neues Profil anlegt und dort den APN von gprsinternet auf business.gprsinternet umstellt.Verwendet man eine DFÜ-Verbindung dafür (die einfach *99# am GPRS-Modem wählt), so muss man stattdessen die Modemeinstellungen ändern. Hierbei gibt man als zusätzlichen Init-String für das Modem an: +cgdconf=1,,"business.gprsinternet" .Damit wird dann der richtige APN gewählt und fortan ist man endlich auch über seine externe IP erreichbar. Thursday, 6. September 2007lseek unter cygwin
Unlängst musste ich in der Firma unsere Unix-Programme mittels Cygwin teilweise auf WIN32 portieren.
Nachdem ich es geschafft hatte, dass die Programme kompilieren versuchte ich ein Programm zu starten. Boom: malloc() fehler, zu wenig SPeicherplatz. Eine Analyse des MAskenhandlercodes ergab allerdings, dass die Fehlermeldung ein Folgefehler von einem misslungenen lseek() Aufruf war.Der Maskenhandler wurde vor 20 Jahren unter Unix programmiert. Es wurde für den Seek-Modus nicht eine der Konstanten aus unistd.h verwendet, sondern der numerische Wert direkt angegeben.Ansich kein Fehler. Daher wurde die unistd.h auch nicht #include t, der Compiler bindet lseek() dann implizit.Allerdings lieferte unter Cygwin das lseek() dann immer EINVAL .Der Parameterwert stimmte aber. Schließlich habe ich dann folgendes Experiment gemacht: Einmal ein Programm, in welchem lseek() implizit gebunden wird und einmal habe ich die unistd.h inkludiert. Siehe da, mit unistd.h funktioniert das Kommando, ohne die include-Datei nicht. Ein weiterer Versuch zeigte, dass bereits die Deklaration der Funktion ausreicht, damit es funktioniert, nur beim implizit binden trat immer EINVAL auf.Das machte mich natürlich etwas stutzig, sodass ich dann den Assember-Code der beiden Funktionsaufrufe verglichen habe:
Bei impliziter Bindung wird also offensichtlich lseek64 der Cygwin-DLL mit einem Parameter zu wenig aufgerufen: Implizite Bindung: lseek64(hFile, 0, 2); Mit Deklaration: lseek64(hFile, 0, 0, 2); Daher also der Fehler. Ob das nun ein Compilerbug ist oder böse Absicht kann ich nicht sagen. Auf der Cygwin-Mailingliste habe ich nur bei einem ähnlichen Fall den lapidaren Kommentar gefunden, dass es unsauber ist, die Header-Datei nicht zu inkludieren. Das mag schon stimmen, allerdings sehe ich die fehlerhafte implizite Bindung trotzdem als Bug an.
(Seite 1 von 1, insgesamt 2 Einträge)
|
SucheBlog abonnierenTop ReferrerVerwaltung des Blog |