diff --git a/pvAccessApp/remote/blockingTCPAcceptor.cpp b/pvAccessApp/remote/blockingTCPAcceptor.cpp index caf7a2a..0f7b381 100644 --- a/pvAccessApp/remote/blockingTCPAcceptor.cpp +++ b/pvAccessApp/remote/blockingTCPAcceptor.cpp @@ -196,6 +196,7 @@ namespace pvAccess { * Create transport, it registers itself to the registry. * Each transport should have its own response handler since it is not "shareable" */ + // TODO it is shareable?!!! but code is not adopted to it... std::auto_ptr responseHandler = _responseHandlerFactory->createResponseHandler(); BlockingServerTCPTransportCodec::shared_pointer transport = BlockingServerTCPTransportCodec::create( diff --git a/pvAccessApp/remote/blockingTCPConnector.cpp b/pvAccessApp/remote/blockingTCPConnector.cpp index 44397d8..1871e9d 100644 --- a/pvAccessApp/remote/blockingTCPConnector.cpp +++ b/pvAccessApp/remote/blockingTCPConnector.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -78,8 +79,7 @@ namespace epics { Context::shared_pointer context = _context.lock(); // first try to check cache w/o named lock... - Transport::shared_pointer tt = context->getTransportRegistry()->get("TCP", &address, priority); - BlockingClientTCPTransport::shared_pointer transport = std::tr1::static_pointer_cast(tt); + Transport::shared_pointer transport = context->getTransportRegistry()->get("TCP", &address, priority); if(transport.get()) { LOG(logLevelDebug, "Reusing existing connection to PVA server: %s", @@ -92,8 +92,7 @@ namespace epics { if(lockAcquired) { try { // ... transport created during waiting in lock - tt = context->getTransportRegistry()->get("TCP", &address, priority); - transport = std::tr1::static_pointer_cast(tt); + transport = context->getTransportRegistry()->get("TCP", &address, priority); if(transport.get()) { LOG(logLevelDebug, "Reusing existing connection to PVA server: %s", @@ -141,8 +140,18 @@ namespace epics { // create transport // TODO introduce factory - transport = BlockingClientTCPTransport::create( - context, socket, responseHandler, _receiveBufferSize, + // get TCP send buffer size + osiSocklen_t intLen = sizeof(int); + int _socketSendBufferSize; + retval = getsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char *)&_socketSendBufferSize, &intLen); + if(retval<0) { + char strBuffer[64]; + epicsSocketConvertErrnoToString(strBuffer, sizeof(strBuffer)); + LOG(logLevelDebug, "Error getting SO_SNDBUF: %s", strBuffer); + } + + transport = BlockingClientTCPTransportCodec::create( + context, socket, responseHandler, _receiveBufferSize, _socketSendBufferSize, client, transportRevision, _beaconInterval, priority); // verify