By default, a socket is in blocking mode. Once you tell a socket to do something, the program loses control until the socket finishes or times out. If you set the socket to non-blocking, the program gets control back immediately, so you can put up a message that you're contacting the server or whatever. IOW, maybe the app only appears to be slow because it can't do anything until the socket is finished. There's nothing you can do to speed up a situation in which the path is slow and it takes 5 seconds to connect or receive a packet. It takes what it takes. But if the screen just sits there the app "looks" slow.