[Gelöst-Sockets] bind() unter linux funktioniert nicht?
-
Hi.
Ich habe mal eine Klasse für Sockets geschrieben (naja, gut, dass manche Bücher fertigen Code bereitstellen =D). Ich habe den Code nur minimal verändert. Im Buch waren immer jeweils die Windows und Unix varianten angegeben.void Socket::bind(int port) { if (!valid) throw new SockEx(SockEx::cINVALID); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(port); int r = ::bind(sodex, (sockaddr*)&addr, sizeof(addr)); // giebt -1 zurück, aber warum?! if (r < 0) throw new SockEx(SockEx::cFAIL); }Output:
2 < Das ist SockEx::cFAIL
terminate called after throwing an instance of 'SockEx*'
Aborted
Press [Enter] to close the terminal ...sodex ist der socket deskriptor (socket + index
)
addr ist sockaddr_in
SockEx eine sehr simple exception klasse
Ich benutze Netbeans 6.9 auf Linux ubuntu 10.04Danke im Voraus

-
Eventuell ist der Port bereits belegt. Versuch einen Port über 1024.
-
Ach, im übrigen solltest du die Struktur auch mit
memset(&addr, 0, sizeof(addr));auf 0 setzen:void Socket::bind(int port) { if (!valid) throw new SockEx(SockEx::cINVALID); memset(&addr, 0, sizeof(addr)); // <--- addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(port); int r = ::bind(sodex, (sockaddr*)&addr, sizeof(addr)); if (r < 0) throw new SockEx(SockEx::cFAIL); }
-
Ich blödmann. Danke. =|
-
lk schrieb:
void Socket::bind(int port) { if (!valid) throw new SockEx(SockEx::cINVALID); ... }In C++ sollte man keine mit new allokierten Objekte als Excption werfen. Besser ist:
void Socket::bind(int port) { if (!valid) throw SockEx(SockEx::cINVALID); ... }und später
try { s.bind( 42 ); } catch( const SockEx& ex ) { ... }Lars