---
title:  Configuring Sockets in Multi-Site (WAN) Deployments
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

When you determine buffer size settings, you try to strike a balance between communication needs and other processing.

This table lists the settings for gateway relationships and protocols, and tells where to set them.

<table>
<thead>
<tr class="header">
<th>Protocol / Area Affected</th>
<th>Configuration Location</th>
<th>Property Name</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>TCP / IP</strong></td>
<td>---</td>
<td>---</td>
</tr>
<tr class="even">
<td>Gateway sender</td>
<td><code class="ph codeph">gfsh create gateway-sender</code> or
<p>cache.xml &lt;gateway-sender&gt;</p></td>
<td>socket&#8209;buffer&#8209;size</td>
</tr>
<tr class="odd">
<td>Gateway receiver</td>
<td><code class="ph codeph">gfsh create gateway-receiver</code> or cache.xml &lt;gateway-receiver&gt;</td>
<td>socket-buffer-size</td>
</tr>
</tbody>
</table>

**TCP/IP Buffer Sizes**

If possible, your TCP/IP buffer size settings should match across your installation. At a minimum, follow the guidelines listed here.

-   **Multisite (WAN)**. In a multi-site installation using gateways, if the link between sites is not tuned for optimum throughput, it could cause messages to back up in the cache queues. If a receiving queue overflows because of inadequate buffer sizes, it will become out of sync with the sender and the receiver will be unaware of the condition.

    The gateway sender's socket-buffer-size attribute should match the gateway receiver’s socket-buffer-size attribute for all gateway receivers that the sender connects to, as in these example `cache.xml` snippets:

    ``` pre
    Gateway Sender Socket Buffer Size cache.xml Configuration: 

    <gateway-sender id="sender2" parallel="true"
     remote-distributed-system-id="2"
     socket-buffer-size="42000"
     maximum-queue-memory="150"/>

    Gateway Receiver Socket Buffer Size cache.xml Configuration:
    <gateway-receiver start-port="1530" end-port="1551"
     socket-buffer-size="42000"/>  
    ```

**Note:**
WAN deployments increase the messaging demands on a <%=vars.product_name%> system. To avoid hangs related to WAN messaging, always set `conserve-sockets=false` for GemFire members that participate in a WAN deployment.

## <a id="socket_comm__section_4A7C60D4471A4339884AA5AAC97B4DAA" class="no-quick-link"></a>Multi-site (WAN) Socket Requirements

Each gateway sender and gateway receiver uses a socket to distribute events or to listen for incoming connections from remote sites.

<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Multi-site Socket Description</th>
<th>Number Used</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Listener for incoming connections</p></td>
<td><p>summation of the number of gateway-receivers defined for the member</p></td>
</tr>
<tr class="even">
<td><p>Incoming connection</p></td>
<td><p>summation of the total number of remote gateway senders configured to connect to the gateway receiver</p></td>
</tr>
<tr class="odd">
<td><p>Outgoing connection</p></td>
<td><p>summation of the number of gateway senders defined for the member</p></td>
</tr>
</tbody>
</table>

Servers are peers in their own clusters and have the additional socket requirements as noted in the Peer-to-Peer section above.

## <a id="socket_comm__section_66D11C8E84F941B58800EDB52194B087" class="no-quick-link"></a>Member produces SocketTimeoutException

A client, server, gateway sender, or gateway receiver produces a `SocketTimeoutException` when it stops waiting for a response from the other side of the connection and closes the socket. This exception typically happens on the handshake or when establishing a callback connection.

Response:

Increase the default socket timeout setting for the member. This timeout is set separately for the client Pool and for the gateway sender and gateway receiver, either in the `cache.xml` file or through the API. For a client/server configuration, adjust the "read-timeout" value as described in [&lt;pool&gt;](../../reference/topics/client-cache.html#cc-pool) or use the `org.apache.geode.cache.client.PoolFactory.setReadTimeout` method. For a gateway sender or gateway receiver, see [WAN Configuration](../../reference/topics/elements_ref.html#topic_7B1CABCAD056499AA57AF3CFDBF8ABE3).
