version 1.78, 2005/11/29 20:06:14
|
version 1.78.2.2, 2006/03/07 18:45:46
|
|
|
//%2005//////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development | // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. | // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. | // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; | // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// EMC Corporation; VERITAS Software Corporation; The Open Group. | // EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
#include "Config.h" | #include "Config.h" |
#include "Constants.h" | #include "Constants.h" |
#include <iostream> | #include <iostream> |
#include "Socket.h" |
|
| |
#ifdef PEGASUS_OS_TYPE_WINDOWS | #ifdef PEGASUS_OS_TYPE_WINDOWS |
#include <windows.h> | #include <windows.h> |
|
|
# include <fcntl.h> | # include <fcntl.h> |
# include <netdb.h> | # include <netdb.h> |
# include <netinet/in.h> | # include <netinet/in.h> |
|
# include <netinet/tcp.h> |
# include <arpa/inet.h> | # include <arpa/inet.h> |
# include <sys/socket.h> | # include <sys/socket.h> |
# ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET | # ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET |
|
|
#include "OS400ConvertChar.h" | #include "OS400ConvertChar.h" |
#endif | #endif |
| |
|
|
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
|
|
Array<HTTPConnection*> connections; | Array<HTTPConnection*> connections; |
}; | }; |
| |
|
//------------------------------------------------------------------------------ |
|
// |
|
// _setTCPNoDelay() |
|
// |
|
//------------------------------------------------------------------------------ |
|
|
|
inline void _setTCPNoDelay(PEGASUS_SOCKET socket) |
|
{ |
|
// This function disables "Nagle's Algorithm" also known as "the TCP delay |
|
// algorithm", which causes read operations to obtain whatever data is |
|
// already in the input queue and then wait a little longer to see if |
|
// more data arrives. This algorithm optimizes the case in which data is |
|
// sent in only one direction but severely impairs performance of round |
|
// trip servers. Disabling TCP delay is a standard technique for round |
|
// trip servers. |
|
|
|
int opt = 1; |
|
setsockopt(socket, IPPROTO_TCP, TCP_NODELAY, (char*)&opt, sizeof(opt)); |
|
} |
|
|
//////////////////////////////////////////////////////////////////////////////// | //////////////////////////////////////////////////////////////////////////////// |
// | // |
// HTTPAcceptor | // HTTPAcceptor |
|
|
else | else |
{ | { |
_rep->socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); | _rep->socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); |
|
|
|
_setTCPNoDelay(_rep->socket); |
} | } |
| |
if (_rep->socket < 0) | if (_rep->socket < 0) |