Project

General

Profile

Bug #618 » socket_timeout_patch_2.diff

Proposed patch for configurable socket timeout - Jörg Riesmeier, 2015-04-08 13:34

View differences:

dcmnet/apps/storescp.cc
#include "dcmtk/dcmdata/dcuid.h" /* for dcmtk version name */
#include "dcmtk/dcmdata/dcdeftag.h"
#include "dcmtk/dcmdata/dcostrmz.h" /* for dcmZlibCompressionLevel */
#include "dcmtk/dcmnet/dcmtrans.h"
#ifdef WITH_OPENSSL
#include "dcmtk/dcmtls/tlstrans.h"
......
T_DIMSE_BlockingMode opt_blockMode = DIMSE_BLOCKING;
int opt_dimse_timeout = 0;
int opt_acse_timeout = 30;
int opt_socket_timeout = 60;
#if defined(HAVE_FORK) || defined(_WIN32)
OFBool opt_forkMode = OFFalse;
......
cmd.addOption("--acse-timeout", "-ta", 1, "[s]econds: integer (default: 30)", "timeout for ACSE messages");
cmd.addOption("--dimse-timeout", "-td", 1, "[s]econds: integer (default: unlimited)", "timeout for DIMSE messages");
cmd.addOption("--socket-timeout", "-ts", 1, "[s]econds: integer (default: 60)", "timeout for underlying socket");
OFString opt1 = "set my AE title (default: ";
opt1 += APPLICATIONTITLE;
......
opt_dimse_timeout = OFstatic_cast(int, opt_timeout);
opt_blockMode = DIMSE_NONBLOCKING;
}
if (cmd.findOption("--socket-timeout"))
{
OFCmdSignedInt opt_timeout = 0;
app.checkValue(cmd.getValueAndCheckMin(opt_timeout, 1));
opt_socket_timeout = OFstatic_cast(int, opt_timeout);
}
if (cmd.findOption("--aetitle")) app.checkValue(cmd.getValue(opt_respondingAETitle));
if (cmd.findOption("--max-pdu")) app.checkValue(cmd.getValueAndCheckMinMax(opt_maxPDU, ASC_MINIMUMPDUSIZE, ASC_MAXIMUMPDUSIZE));
......
const char* transferSyntaxes[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL };
int numTransferSyntaxes = 0;
// Set the socket timeout value
DcmTransportConnection::setSocketTimeout(opt_socket_timeout);
// try to receive an association. Here we either want to use blocking or
// non-blocking, depending on if the option --eostudy-timeout is set.
if( opt_endOfStudyTimeout == -1 )
-
dcmnet/include/dcmtk/dcmnet/dcmtrans.h
*/
static OFBool selectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
/** returns the socket timeout value in seconds
* @return socket timeout value
*/
static int getSocketTimeout() { return socketTimeout; }
/** set the socket file descriptor managed by this object.
* @param socket file descriptor
*/
static void setSocketTimeout(int timeout) { socketTimeout = timeout; }
protected:
/** returns the socket file descriptor managed by this object.
......
*/
static OFBool fastSelectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
/** Create a class value for how long to hold onto a connection before aborting
*/
static int socketTimeout;
/// the socket file descriptor used by the transport connection.
int theSocket;
};
dcmnet/libsrc/dcmtrans.cc
#include <GUSI.h> /* Use the Grand Unified Sockets Interface (GUSI) on Macintosh */
#endif
int DcmTransportConnection::socketTimeout = 60;
DcmTransportConnection::DcmTransportConnection(int openSocket)
: theSocket(openSocket)
{
......
{
#ifndef DISABLE_SEND_TIMEOUT
{
/* use a timeout of 60 seconds for the send() function */
const int sendTimeout = 60;
/* set a timeout for the send() function */
const int sendTimeout = DcmTransportConnection::socketTimeout;
DCMNET_DEBUG("setting network send timeout to " << sendTimeout << " seconds");
#ifdef HAVE_WINSOCK_H
// for Windows, specify send timeout in milliseconds
......
#endif
#ifndef DISABLE_RECV_TIMEOUT
{
/* use a timeout of 60 seconds for the recv() function */
const int recvTimeout = 60;
/* set a timeout for the recv() function */
const int recvTimeout = socketTimeout;
DCMNET_DEBUG("setting network receive timeout to " << recvTimeout << " seconds");
#ifdef HAVE_WINSOCK_H
// for Windows, specify receive timeout in milliseconds
    (1-1/1)