IP Library Granted Patent US 7,801,978
Granted Patent B1
US 7,801,978 · App. 09/690,437 · Granted Sep 21, 2010

Apparatus, method and computer program product for efficiently pooling connections between clients and servers

Assignee: Citrix Systems, Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,801,978
App. No.
09/690,437
Granted
Sep 21, 2010
Kind
B1
Abstract

An apparatus, method and computer program product for efficiently pooling network client-server connections. The apparatus is implemented within an interface unit connecting a plurality of servers to the Internet, which is in turn connected to a plurality of clients. The method includes the steps of opening a connection between a first client and the interface unit; determining whether a connection between the interface unit and a server is finished being utilized by the first client; opening a connection between a second client and the interface unit; if no free connection is open between the interface unit and the server, then allowing the second client to access information on the server via the same connection utilized by the first client without waiting for the first client to initiate closing the connection; and delinking the connections between the first and second clients and the interface unit while keeping open the connection between the interface unit and the server.

Claims (68)

1. A method of pooling by an interface unit a transport layer connection to a server, the method comprising the steps of:

(a) receiving, by an interface unit, a first request of a first client to access a server, the first client and the interface unit communicating via a first transport layer connection;

(b) identifying, by the interface unit, that the interface unit has a second transport layer connection established with the server indicated by the first request;

(c) determining, by the interface unit, from monitoring application layer data of-network traffic between the second client and the server received by the interface unit that a second client and the server have completed transferring a last byte of data of a response for a second client's request via the second transport layer connection;

(d) transmitting, by the interface unit, the first request via the second transport layer connection in response to the determination of step (c) and prior to receiving, by the interface unit, one of a finish command or a reset command for the second client's connection to the server;

(e) determining, by the interface unit, from monitoring application layer data of network traffic received by the interface unit that the second client and the server have not completed a transfer of the last byte of data of a second response to a second request of the second client via the second transport layer connection in response to receiving a third request from one of the first client or the second client to access the server; and

(f) establishing, by the interface unit, a third transport layer connection with the server in response to the determination of step (e).

2. The method of claim 1 , comprising receiving, by the interface unit, the second request to access the server via one of the first client, the second client or a third client.

3. The method of claim 1 , comprising intercepting, by the interface unit, one of the first request, the second request or the third request.

4. The method of claim 1 , wherein step (b) comprises identifying, by the interface unit, the server from a destination internet protocol address of a network packet of the first request.

5. The method of claim 1 , wherein step (b) comprises identifying, by the interface unit, the server from a path name of the first request.

6. The method of claim 1 , wherein step (c) comprises determining, by the interface unit, via a content length parameter of monitored application layer data that the second client and the server have completed transferring data.

7. The method of claim 1 , wherein step (c) comprises determining, by the interface unit, via one or more chunk-size fields of monitored application layer data that the second client and the server have completed transferring data.

8. The method of claim 1 , wherein step (e) comprises determining, by the interface unit, via a content length parameter of monitored application layer data that the second client and the server have not completed transferring data.

9. The method of claim 1 , wherein step (e) comprises determining, by the interface unit, via one or more chunk-size fields of monitored application layer data that the second client and the server have not completed transferring data.

10. The method of claim 1 , comprising inserting, by the interface unit, information in the first request of the first client to indicate to the server to keep a transport layer connection open.

11. The method of claim 1 , wherein step (f) comprises waiting, by the interface unit, to use the second transport layer connection to transmit the third request.

12. The method of claim 11 , comprising receiving, by the interface unit, an acknowledgement from the second client that transferring of data between the second client and the server via the second transport layer connection has completed.

13. The method of claim 12 , comprising transmitting, by the interface unit, the third request via the second transport layer connection in response to receiving the acknowledgement and prior to receiving a request to close a transport layer connection between the second client and the server.

14. The method of claim 1 , comprising receiving, by the interface unit, a response to the first request from the server via the second transport layer connection, and transmitting the response to the first client via the first transport layer connection.

15. The method of claim 1 , wherein one of the first request, the second request or the third request comprises a request to open a transport layer connection.

16. The method of claim 1 , comprising transmitting, by the interface unit, the third request via the third transport layer connection.

17. An interface unit for pooling a transport layer connection to a server, the interface unit comprising:

means for receiving a first request of a first client to access a server, the first client and the interface unit communicating via a first transport layer connection;

means for identifying that the interface unit has a second transport layer connection established with the server indicated by the first request;

means for ascertaining from monitoring application layer data of network traffic between the second client and the server received by the interface unit that a second client and the server have completed transferring a last byte of data of a response for a second client's request via the second transport layer connection;

means for transmitting the first request via the second transport layer connection in response to the means for ascertaining and prior to receiving one of a finish command or a reset command for the second client's connection to the server;

means for determining from monitoring application layer data of network traffic received by the interface unit that the second client and the server have not completed a transfer of the last byte of data of a second response to a second request of the second client via the second transport layer connection in response to receiving a third request from one of the first client or the second client to access the server; and

means for establishing a third transport layer connection with the server in response to the determination.

18. The interface unit of claim 17 , comprising means for receiving the second request to access the server via one of the first client, the second client or a third client.

19. The interface unit of claim 17 , comprising means for intercepting one of the first request, the second request or the third request.

20. The interface unit of claim 17 , comprising means for identifying the server from a destination internet protocol address of a network packet of the first request.

21. The interface unit of claim 17 , comprising means for identifying the server from a path name of the first request.

22. The interface unit of claim 17 , comprising means for determining via a content length parameter of monitored application layer data that the second client and the server have completed transferring data.

23. The interface unit of claim 17 , comprising means for determining via one or more chunk-size fields of monitored application layer data that the second client and the server have completed transferring data.

24. The interface unit of claim 17 , comprising means for determining, by the interface unit, via a content length parameter of monitored application layer data that the second client and the server have not completed transferring data.

25. The interface unit of claim 17 , comprising means for determining via one or more chunk-size fields of monitored application layer data that the second client and the server have not completed transferring data.

26. The interface unit of claim 17 , comprising means for inserting information in the first request of the first client to indicate to the server to keep a transport layer connection open.

27. The interface unit of claim 17 , comprising means for waiting to use the second transport layer connection to transmit the third request instead of establishing the third transport layer connection.

28. The interface unit of claim 27 , comprising means for receiving an acknowledgement from the second client that transferring of data between the second client and the server via the second transport layer connection has completed.

29. The interface unit of claim 28 , comprising means for transmitting the third request via the second transport layer connection in response to receiving the acknowledgement and prior to receiving a request to close a transport layer connection between the second client and the server.

30. The interface unit of claim 17 , comprising means for receiving a response to the first request from the server via the second transport layer connection, and transmitting the response to the first client via the first transport layer connection.

31. The interface unit of claim 17 , wherein one of the first request, the second request or the third request comprises a request to open a transport layer connection.

32. The interface unit of claim 17 , comprising means for transmitting the third request via the third transport layer connection.

33. A method of pooling by an interface unit a transport layer connection to a server, the method comprising the steps of:

(a) receiving, by an interface unit, a first request of a first client to access a server, the first client and the interface unit communicating via a first transport layer connection;

(b) identifying, by the interface unit, that the interface unit has a second transport layer connection established with the server indicated by the first request;

(c) determining, by the interface unit, from monitoring application layer data of server responses received by the interface unit that a second client and the server have not completed a transfer of the last byte of data of a response of the second client via the second transport layer connection;

(d) transmitting, by the interface unit, the first request via the second transport layer connection in response to the determination of step (c) and prior to receiving, by the interface unit, one of a finish command or a reset command for the second client's connection to the server;

(e) determining, by the interface unit, from monitoring application layer data of server responses received by the interface unit that the first client and the server have not completed a transfer of a last byte of data of a response to the first request via the second transport layer connection in response to receiving a third request from one of the first client or the second client to access the server; and

(f) establishing, by the interface unit, a third transport layer connection with the server in response to the determination of step (e).

34. The method of claim 33 , comprising receiving, by the interface unit, the second request to access the server via one of the first client, the second client or a third client.

35. The method of claim 33 , wherein step (c) comprises determining, by the interface unit, via a content length parameter of monitored application layer data that the second client and the server have completed transferring data.

36. The method of claim 33 , wherein step (c) comprises determining, by the interface unit, via one or more chunk-size fields of monitored application layer data that the second client and the server have completed transferring data.

37. The method of claim 33 , wherein step (e) comprises determining, by the interface unit, via a content length parameter of monitored application layer data that the first client and the server have not completed transferring data.

38. The method of claim 33 , wherein step (e) comprises determining, by the interface unit, via one or more chunk-size fields of monitored application layer data that the first client and the server have not completed transferring data.

39. An interface unit for pooling a transport layer connection to a server, the interface unit comprising:

means for receiving a first request of a first client to access a server, the first client and the interface unit communicating via a first transport layer connection;

means for identifying that the interface unit has a second transport layer connection established with the server indicated by the first request;

means for ascertaining from monitoring application layer data of server responses received by the interface unit that a second client and the server have not completed a transfer of the last byte of data of a response of the second client via the second transport layer connection

means for transmitting the first request via the second transport layer connection in response to the means for ascertaining and prior to receiving, by the interface one of a finish command or a reset command for the second client's connection to the server;

means for determining from monitoring application layer data of server responses received by the interface unit that the first client and the server have not completed a transfer of a last byte of data of a response to the first request via the second transport layer connection in response to receiving a third request from one of the first client or the second client to access the server; and

means for establishing a third transport layer connection with the server in response to the determination.

40. The interface unit of claim 39 , comprising means for receiving the second request to access the server via one of the first client, the second client or a third client.

41. The interface unit of claim 39 , comprising means for determining via a content length parameter of monitored application layer data that the second client and the server have completed transferring data.

42. The interface unit of claim 39 , comprising means for determining via one or more chunk-size fields of monitored application layer data that the second client and the server have completed transferring data.

43. The interface unit of claim 39 , comprising means for determining, by the interface unit, via a content length parameter of monitored application layer data that the first client and the server have not completed transferring data.

44. The interface unit of claim 43 , comprising means for determining via one or more chunk-size fields of monitored application layer data that the first client and the server have not completed transferring data.

Assignments (10)
RELEASE AND REASSIGNMENT OF SECURITY INTEREST IN PATENT (REEL/FRAME 062113/0001) Recorded Apr 14, 2023
From: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
To: CITRIX SYSTEMS, INC.; CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.)
Reel/Frame 063339/0525 →
PATENT SECURITY AGREEMENT Recorded Apr 14, 2023
From: CLOUD SOFTWARE GROUP, INC. (F/K/A TIBCO SOFTWARE INC.); CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 063340/0164 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: BANK OF AMERICA, N.A., AS COLLATERAL AGENT
Reel/Frame 062112/0262 →
SECOND LIEN PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: GOLDMAN SACHS BANK USA, AS COLLATERAL AGENT
Reel/Frame 062113/0001 →
PATENT SECURITY AGREEMENT Recorded Oct 7, 2022
From: TIBCO SOFTWARE INC.; CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION, AS NOTES COLLATERAL AGENT
Reel/Frame 062113/0470 →
SECURITY INTEREST Recorded Sep 30, 2022
From: CITRIX SYSTEMS, INC.
To: WILMINGTON TRUST, NATIONAL ASSOCIATION
Reel/Frame 062079/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 23, 2013
From: CITRIX APPLICATION NETWORKING, LLC
To: CITRIX SYSTEMS, INC.
Reel/Frame 030265/0903 →
MERGER Recorded Jan 19, 2006
From: NETSCALER, INC.
To: NCAR, LLC
Reel/Frame 017034/0431 →
CHANGE OF NAME Recorded Jan 19, 2006
From: NCAR, LLC
To: CITRIX APPLICATION NETWORKING, LLC
Reel/Frame 017034/0399 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 18, 2000
From: SUSAI, MICHEL K.; SINHA, RAJIV; SHETTY, ANIL
To: NETSCALER, INC.
Reel/Frame 011217/0210 →