Receiver::~Receiver(void) {
#ifdef DEBUG
- cerr << __FILE__ << ": destructor." << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": destructor." << endl;
#endif // DEBUG
}
-Receiver::Receiver(const Connection::Port& port, const string& host):
- Connection(sockbuf::sock_dgram, host, port) {
+Receiver::Receiver(const Connection::Port& port, const string& host)
+ throw(sockerr): Connection(sockbuf::sock_dgram, host, port) {
#ifdef DEBUG
- cerr << __FILE__ << ": port = " << port
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": port = " << port
<< " | host = " << host << endl;
#endif // DEBUG
- //socket->bind(port);
socket->bind(host.c_str(), port);
}
// XXX EL XML DEBE EMPEZAR Y FINALIZAR EN UNA LINEA SEPARADA.
-void Receiver::real_run(void) {
+void Receiver::real_run(void) throw() {
#ifdef DEBUG
- cerr << __FILE__ << ": real_run." << endl;
+ cerr << __FILE__ << "(" << __LINE__ << ")"
+ << ": real_run." << endl;
#endif // DEBUG
char buf[BUFSIZ];
bool in_frame = false;
stringstream ss;
- while (!stop && socket.getline(buf, BUFSIZ)) {
+ while (!stop()) {
+ try {
+ if (!socket.getline(buf, BUFSIZ)) {
+ return; // Se terminó la transmision.
+ }
+ } catch (const sockerr& e) {
+ signal_error().emit(e.serrno(), e.errstr());
+ return;
+ }
string sbuf = buf;
if (in_frame) {
string::size_type pos = sbuf.find(FRAME_END);