When using reverse connection, is there any specific order or something to sending and receiving data? Whenever I try to receive data with the client, it returns either garbage, or an error that means a socket operation was performed on a non-socket object (which I don't see where that happened), but I'm sure that I'm doing something wrong with the code

[CLIENT]
Code:
#include <ws2tcpip.h>
#include <windows.h>
#include <string>
#include <sstream>
#include <stdio.h>

using namespace std;

//CLIENT CODE

int main()
{
    WSADATA wsd;
    if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) //first init winsock
    {
        MessageBox(NULL,"Error occured","WSAStartup",MB_OK);
        WSACleanup();
        exit(1);
    }

    struct addrinfo hints, *connection;
    memset(&hints,0,sizeof(hints));

    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;

    if (getaddrinfo(NULL,"9001",&hints,&connection) == 0); //Port 9001
    else
    {
        stringstream ws;
        ws << "Connection Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"gethostbyaddr()",MB_OK);
        WSACleanup();
        exit(1);
    }

    SOCKET Sock = socket(connection->ai_family,connection->ai_socktype,connection->ai_protocol); //TCP SOCKET
    SOCKET ServSock;

    if (Sock == INVALID_SOCKET || Sock == SOCKET_ERROR)
    {
        MessageBox(NULL,"Socket error","socket()",MB_OK);
        WSACleanup();
        exit(1);
    }

    printf("Binding socket to port 9001.\n");
    if (bind(Sock,connection->ai_addr,connection->ai_addrlen) == -1)
    {
        stringstream ws;
        ws << "Port Binding Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"bind()",MB_OK);
        WSACleanup();
        exit(1);
    }

    printf("Setting Listen\n");
    listen(Sock,10);

    socklen_t addr_size = sizeof(struct sockaddr_storage);
    struct sockaddr_storage server_addr;

    printf("Listening for incoming connections...\n");
    if (ServSock = accept(Sock,(struct sockaddr*)&server_addr,&addr_size) == SOCKET_ERROR)
    {
        stringstream ws;
        ws << "Accepting Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"accept()",MB_OK);
        closesocket(Sock);
        WSACleanup();
        exit(1);
    }

    printf("Connection to remote host verified\n");

    char buff[4096];
    int numbytes;

    if (numbytes = recv(ServSock,buff,4095,MSG_OOB) < 0) //receive data
    {
        stringstream ws;
        ws << "Receiving Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"recv()",MB_OK);
        closesocket(Sock);
        WSACleanup();
        exit(1);
    }

    printf("Data received");

    buff[numbytes] = '\0';

    stringstream IPAdd;
    IPAdd << "Ip Address of server: " << buff;


    printf("%s\n",IPAdd.str().c_str());

    system("PAUSE");

    return 0;

}

[SERVER]
Code:
#include <ws2tcpip.h>
#include <windows.h>
#include <string>
#include <sstream>
#include <stdio.h>

using namespace std;


//SERVER CODE

int main()
{
    WSADATA wsd;
    if (WSAStartup(MAKEWORD(2,2),&wsd) != 0) //first init winsock
    {
        MessageBox(NULL,"Error occured","WSAStartup",MB_OK);
        WSACleanup();
        exit(1);
    }

    struct addrinfo hints, *connection;

    memset(&hints,0,sizeof(hints));

    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;

    printf("Getting address information from IP\n");

    if(getaddrinfo("their ip goes here","9001",&hints,&connection) != 0)
    {
        stringstream ws;
        ws << "Connection Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"gethostbyaddr()",MB_OK);
        WSACleanup();
        exit(1);
    }

    SOCKET Sock;

    printf("Creating Socket.\n");
    if ((Sock = socket(connection->ai_family,connection->ai_socktype,connection->ai_protocol)) == INVALID_SOCKET)
    {
        stringstream ws;
        ws << "Socket Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"socket()",MB_OK);
        WSACleanup();
        exit(1);
    }

    printf("Connecting...\n");
    if (connect(Sock,connection->ai_addr,connection->ai_addrlen) == -1)
    {
        stringstream ws;
        ws << "Connection Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"connect()",MB_OK);
        WSACleanup();
        exit(1);
    }

    char ipv4[4096] = "Data goes here.\0";

    int sent;

    if (sent = send(Sock,ipv4,strlen(ipv4),MSG_OOB) > 0);
    else
    {
        stringstream ws;
        ws << "Sending Error: " << WSAGetLastError();
        MessageBox(NULL,ws.str().c_str(),"send()",MB_OK);
        WSACleanup();
        exit(1);
    }

    printf("Data sent: %d.\n",sent);

    system("PAUSE");

    closesocket(Sock);
    freeaddrinfo(connection);

    return 0;

}
Even without sending anything from the server, the client does not block recv() and just returns whatever was in the buffer before.