From 07aff5ad161762ff0c4d6da2955a84a8b2bd9b04 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Fri, 12 Aug 2011 02:03:07 +0200 Subject: [PATCH] Cleanup in TS dir (Erik! No binaries in the git! ), added getError() to socket lib, fixed Buffer problems when a Connector is being slow. --- Buffer/main.cpp | 20 ++++++++++---------- Connector_TS/trim | Bin 8897 -> 0 bytes util/socket.cpp | 37 ++++++++++++++++++++++++++++++++----- util/socket.h | 3 ++- 4 files changed, 44 insertions(+), 16 deletions(-) delete mode 100755 Connector_TS/trim diff --git a/Buffer/main.cpp b/Buffer/main.cpp index d0404d78..dbfa9b94 100644 --- a/Buffer/main.cpp +++ b/Buffer/main.cpp @@ -66,8 +66,8 @@ namespace Buffer{ bool doSend(){ int r = S.iwrite((char*)lastpointer+currsend, MyBuffer_len-currsend); if (r <= 0){ - if ((r < 0) && (errno == EWOULDBLOCK)){return false;} - Disconnect("Connection closed"); + if (errno == EWOULDBLOCK){return false;} + Disconnect(S.getError()); return false; } currsend += r; @@ -79,7 +79,7 @@ namespace Buffer{ void Send(buffer ** ringbuf, int buffers){ /// \todo For MP3: gotproperaudio - if false, only send if first byte is 0xFF and set to true if (!S.connected()){return;}//cancel if not connected - + //still waiting for next buffer? check it if (MyBuffer_num < 0){ MyBuffer_num = ringbuf[MyBuffer]->number; @@ -90,13 +90,13 @@ namespace Buffer{ lastpointer = ringbuf[MyBuffer]->FLV.data; } } - + //do check for buffer resizes if (lastpointer != ringbuf[MyBuffer]->FLV.data){ Disconnect("Buffer resize at wrong time... had to disconnect"); return; } - + //try to complete a send if (doSend()){ //switch to next buffer @@ -156,13 +156,13 @@ namespace Buffer{ int lastproper = 0;//last properly finished buffer number unsigned int loopcount = 0; Socket::Connection incoming; - + unsigned char packtype; bool gotVideoInfo = false; bool gotAudioInfo = false; - + int infile = fileno(stdin);//get file number for stdin - + //add stdin to an epoll int poller = epoll_create(1); struct epoll_event ev; @@ -170,8 +170,8 @@ namespace Buffer{ ev.data.fd = infile; epoll_ctl(poller, EPOLL_CTL_ADD, infile, &ev); struct epoll_event events[1]; - - + + while(!feof(stdin) && !FLV::Parse_Error){ //invalidate the current buffer ringbuf[current_buffer]->number = -1; diff --git a/Connector_TS/trim b/Connector_TS/trim deleted file mode 100755 index 4ed69cf137f7c97b57e4f4e9301c1603ee1087b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8897 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 JT0x|9{{)PuGg$xt diff --git a/util/socket.cpp b/util/socket.cpp index e3d9fb20..5bb23f9c 100644 --- a/util/socket.cpp +++ b/util/socket.cpp @@ -33,6 +33,11 @@ void Socket::Connection::close(){ /// Returns internal socket number. int Socket::Connection::getSocket(){return sock;} +/// Returns a string describing the last error that occured. +/// Simply calls strerror(errno) - not very reliable! +/// \todo Improve getError at some point to be more reliable and only report socket errors. +std::string Socket::Connection::getError(){return strerror(errno);} + /// Create a new Unix Socket. This socket will (try to) connect to the given address right away. /// \param address String containing the location of the Unix socket to connect to. /// \param nonblock Whether the socket should be nonblocking. False by default. @@ -86,7 +91,11 @@ signed int Socket::Connection::ready(){ } } if (r == 0){ - close(); return -1; + #if DEBUG >= 4 + fprintf(stderr, "Socket ready error - socket is closed.\n"); + #endif + close(); + return -1; } return r; } @@ -192,7 +201,12 @@ int Socket::Connection::iwrite(void * buffer, int len){ break; } } - if (r == 0){close();} + if (r == 0){ + #if DEBUG >= 4 + fprintf(stderr, "Could not iwrite data! Socket is closed.\n"); + #endif + close(); + } return r; }//Socket::Connection::iwrite @@ -217,7 +231,12 @@ int Socket::Connection::iread(void * buffer, int len){ break; } } - if (r == 0){close();} + if (r == 0){ + #if DEBUG >= 4 + fprintf(stderr, "Could not iread data! Socket is closed.\n"); + #endif + close(); + } return r; }//Socket::Connection::iread @@ -285,7 +304,7 @@ std::string Socket::Connection::getHost(){ Socket::Server::Server(){ sock = -1; }//Socket::Server base Constructor - + /// Create a new TCP Server. The socket is immediately bound and set to listen. /// A maximum of 100 connections will be accepted between accept() calls. /// Any further connections coming in will be dropped. @@ -399,7 +418,12 @@ Socket::Connection Socket::Server::accept(bool nonblock){ } Socket::Connection tmp(r); if (r < 0){ - if (errno != EWOULDBLOCK && errno != EAGAIN){close();} + if (errno != EWOULDBLOCK && errno != EAGAIN){ + #if DEBUG >= 1 + fprintf(stderr, "Error during accept - closing server socket.\n"); + #endif + close(); + } }else{ if (addrinfo.sin6_family == AF_INET6){ tmp.remotehost = inet_ntop(AF_INET6, &(addrinfo.sin6_addr), addrconv, INET6_ADDRSTRLEN); @@ -426,6 +450,9 @@ Socket::Connection Socket::Server::accept(bool nonblock){ /// Close connection. The internal socket is closed and then set to -1. void Socket::Server::close(){ + #if DEBUG >= 4 + fprintf(stderr, "ServerSocket closed.\n"); + #endif shutdown(sock, SHUT_RDWR); ::close(sock); sock = -1; diff --git a/util/socket.h b/util/socket.h index 2b982563..9aa754be 100644 --- a/util/socket.h +++ b/util/socket.h @@ -45,6 +45,7 @@ namespace Socket{ void close(); ///< Close connection. std::string getHost(); ///< Gets hostname for connection, if available. int getSocket(); ///< Returns internal socket number. + std::string getError(); ///< Returns a string describing the last error that occured. friend class Server; }; @@ -61,5 +62,5 @@ namespace Socket{ void close(); ///< Close connection. int getSocket(); ///< Returns internal socket number. }; - + };