X-Git-Url: https://oss.titaniummirror.com/gitweb/?a=blobdiff_plain;f=support%2Fsdk%2Fcpp%2Fsf%2Ftcpcomm.cpp;h=8e5efee52a1f6c2c08b60806ca3633bb33d56746;hb=f2ec0361a8796350bde71e0611e16be06ba22be0;hp=85b221a9db6ac7c5c66cbb55eaca81a5ae140fdb;hpb=ab3fe89b185c317159f4d206b9e51f50d494bec5;p=tinyos-2.x.git diff --git a/support/sdk/cpp/sf/tcpcomm.cpp b/support/sdk/cpp/sf/tcpcomm.cpp index 85b221a9..8e5efee5 100644 --- a/support/sdk/cpp/sf/tcpcomm.cpp +++ b/support/sdk/cpp/sf/tcpcomm.cpp @@ -57,7 +57,7 @@ void* writeClientsThread(void*); /* opens tcp server port for listening and start threads*/ TCPComm::TCPComm(int pPort, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffer, sharedControlInfo_t& pControl) : readBuffer(pReadBuffer), writeBuffer(pWriteBuffer), errorReported(false), errorMsg(""), control(pControl) -{ +{ // init values writerThreadRunning = false; readerThreadRunning = false; @@ -67,6 +67,7 @@ TCPComm::TCPComm(int pPort, PacketBuffer &pReadBuffer, PacketBuffer &pWriteBuffe readPacketCount = 0; writtenPacketCount = 0; port = pPort; + pthread_mutex_init(&clientInfo.sleeplock, NULL); pthread_mutex_init(&clientInfo.countlock, NULL); pthread_cond_init(&clientInfo.wakeup, NULL); @@ -161,8 +162,9 @@ bool TCPComm::readPacket(int pFD, SFPacket &pPacket) { char l; char* buffer[SFPacket::getMaxPayloadLength()]; - - if (readFD(pFD, &l, 1) != 1) + int err; + + if (readFD(pFD, &l, 1, &err) != 1) { return false; } @@ -170,7 +172,7 @@ bool TCPComm::readPacket(int pFD, SFPacket &pPacket) { return false; } - if (readFD(pFD, (char*) buffer, static_cast(l)) != l) + if (readFD(pFD, (char*) buffer, static_cast(l), &err) != l) { return false; } @@ -184,7 +186,7 @@ bool TCPComm::readPacket(int pFD, SFPacket &pPacket) } } -int TCPComm::writeFD(int fd, const char *buffer, int count) +int TCPComm::writeFD(int fd, const char *buffer, int count, int *err) { int actual = 0; while (count > 0) @@ -194,8 +196,8 @@ int TCPComm::writeFD(int fd, const char *buffer, int count) #else int n = send(fd, buffer, count, MSG_NOSIGNAL); #endif - if (n == -1) - { + if (n == -1) { + *err = errno; return -1; } count -= n; @@ -209,11 +211,12 @@ int TCPComm::writeFD(int fd, const char *buffer, int count) bool TCPComm::writePacket(int pFD, SFPacket &pPacket) { char len = pPacket.getLength(); - if (writeFD(pFD, &len, 1) != 1) + int err; + if (writeFD(pFD, &len, 1, &err) != 1) { return false; } - if (writeFD(pFD, pPacket.getPayload(), len) != len) + if (writeFD(pFD, pPacket.getPayload(), len, &err) != len) { return false; } @@ -225,15 +228,16 @@ bool TCPComm::versionCheck(int clientFD) { char check[2], us[2]; int version; - + int err = 0; /* Indicate version and check if a TinyOS 2.0 serial forwarder on the other end */ us[0] = 'U'; us[1] = ' '; - if (writeFD(clientFD, us, 2) != 2) + + if (writeFD(clientFD, us, 2, &err) != 2) { return false; } - if (readFD(clientFD, check, 2) != 2) + if (readFD(clientFD, check, 2, &err) != 2) { return false; } @@ -395,14 +399,12 @@ void TCPComm::readClients() if (FD_ISSET(*it, &rfds)) { SFPacket packet; - if (readPacket(*it, packet)) - { + if(readPacket(*it, packet)) { // this call blocks until buffer is not full readBuffer.enqueueBack(packet); ++readPacketCount; } - else - { + else { DEBUG("TCPComm::readClients : removeClient") removeClient(*it); }