title: Socket Programming Best Practices?
body: <p>I am designing a file syncing application (like DropBox). The client keeps a persistent Secure (SSL) TCP socket with the server on port 443. Whenever a file is created/changed/deleted on the client, a packet containing the relevant data is sent over the socket to the server, which processes it to update the file on the server. Similarly when something changes on the server, it sends the relevant data to the client, which then updates the local copy.</p>
  
  <p>This is working absolutely fine when the server is on the local computer, or on the local LAN. What I am worried about is when the client is on an unreliable network. <strong>So my question is what are the best practices, issues to consider while designing such an App?</strong></p>
  
  <p>For example, say when a file is created on the Client, should the client just send the data to the server and forget about it, or should it wait for an acknowledgment from the server within a certain time period, failing which send the data again? And what kind of acknowledgement?</p>